PHPでXMLから正規表現で特定の要素を抜き出しているんですが‥。
このような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 から要素を取得できる簡単な方法をご存知の方がいましたらどうか教えてください。
急ぎではありませんのでよろしくお願いします。
お礼
"XSV"は初めて聞きましたが、これを使って検証出来そうです。 英語版の物しかないので少し苦戦しそうですが、さっそく試してみます。 どうも有難うございました。