我想通过 php 捕获所有“dev”标签及其各自的内容,preg_match_all()
但无法获取嵌套的标签。
数据:
<dev>aaa</dev>
<dev>bbb</dev>
<dev>
ccc
<dev>ddd</dev>
</dev>
到目前为止我的表达:
|<dev>(.*)</dev>|Uis
谢谢你的帮助,b。
我想通过 php 捕获所有“dev”标签及其各自的内容,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] 上再次运行该函数
是一个贪婪的*
运算符,消耗尽可能多的字符。您应该使用*?
非贪婪版本来查找可能的最小匹配项。也许正则表达式不是做到这一点的最佳工具。