我想通过php preg_match_all()
捕获所有“dev”标签及其各自的内容,但无法获得嵌套的标签。
数据:
<dev>aaa</dev>
<dev>bbb</dev>
<dev>
ccc
<dev>ddd</dev>
</dev>
我的表达:
|<dev>(.*)</dev>|Uis
谢谢你的帮助, 湾
答案 0 :(得分:7)
不要使用正则表达式进行解析。使用真实的解析器,如DOMDocument或SimpleXML:
$xml = simplexml_load_string('<root>'.$str.'</root>');
答案 1 :(得分:1)
您需要具有递归匹配模式:
/<dev>(.*|(?R))<\/dev>/i
这只会吸收任何嵌套元素,所以如果你想解析那些,你将不得不再次在$ matches [1]上运行该函数
答案 2 :(得分:0)
*
是一个贪婪的运算符,消耗尽可能多的字符。您应该使用*?
非贪婪版本来查找尽可能小的匹配项。也许正则表达式不是最好的工具。