電子書籍の厳選無料作品が豊富!

このようなXMLがあったとします。

sample.xml
----------------------------
<rss>
<xml>
<title>タイトル</title>
<link>ttp://xxx.jp/</link>
</xml>
</rss>
----------------------------
ここから <xml> ~ </xml> の部分だけを抜き出すのですが、

$data = file_get_contents("sample.xml");
preg_match_all("|<xml>((?:(?!</xml>).)*)</xml>|si", $data, $matchs);

で、$matchs[1] の中に <xml> ~ </xml> の部分が配列で入っています。

この『((?:(?!</xml>).)*)』の部分の意味がよく分かりません。
これは先輩から教えてもらった構文ですが、先輩に聞いても詳しい意味を知らないそうです。

『? ! . *』の意味は理解しているけど『:』は参考書でもよく分かりませんでした。
ネットを少し検索したけどこの取得構文の解説が見つからないため質問します。

simpleXML のようなクラスを使わずに、他にも正規表現で XML から要素を取得できる簡単な方法をご存知の方がいましたらどうか教えてください。

急ぎではありませんのでよろしくお願いします。

A 回答 (2件)

話はずれるかもしれませんが



preg_match_all("|<xml>(.*?)</xml>|is", $data, $matches);

でよくないですか?
    • good
    • 0
この回答へのお礼

テストしてみるとうまくいきました!
より簡単な方法を教えていただいてありがとうございました。

お礼日時:2008/10/07 11:25

通常は()で囲むと勝手にキャプチャされるんですが、


(?:xxx)と書くことでキャプチャされないグループになります。
    • good
    • 0
この回答へのお礼

OK牧場!
構文の中央部分はキャプチャされないようにする設定だったのですね。
とても参考になりました。ありがとうございます。

お礼日時:2008/10/07 15:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!