すべての「dev」タグとそれぞれのコンテンツをphpでキャッチしたいのですpreg_match_all()
が、ネストされたタグを取得できません。
データ:
<dev>aaa</dev>
<dev>bbb</dev>
<dev>
ccc
<dev>ddd</dev>
</dev>
これまでの私の表現:
|<dev>(.*)</dev>|Uis
助けてくれてありがとう、b。
すべての「dev」タグとそれぞれのコンテンツをphpでキャッチしたいのですpreg_match_all()
が、ネストされたタグを取得できません。
データ:
<dev>aaa</dev>
<dev>bbb</dev>
<dev>
ccc
<dev>ddd</dev>
</dev>
これまでの私の表現:
|<dev>(.*)</dev>|Uis
助けてくれてありがとう、b。
解析に正規表現を使用しないでください。DOMDocumentやSimpleXMLのような実際のパーサーを使用します。
$xml = simplexml_load_string('<root>'.$str.'</root>');
再帰的なマッチングパターンが必要です。
/<dev>(.*|(?R))<\/dev>/i
これにより、ネストされた要素がすべて吸い取られるため、それらを解析する場合は、$matches[1]で関数を再度実行する必要があります。
は*
貪欲な演算子であり、できるだけ多くの文字を消費します。代わりに、貪欲でないバージョンを使用*?
して、可能な限り最小の一致を見つける必要があります。たぶん、正規表現はこれを行うための最良のツールではありません。