0

我想通过 php 捕获所有“dev”标签及其各自的内容,preg_match_all()但无法获取嵌套的标签。

数据:

<dev>aaa</dev> <dev>bbb</dev> <dev> ccc <dev>ddd</dev> </dev>

到目前为止我的表达:

|<dev>(.*)</dev>|Uis

谢谢你的帮助,b。

4

3 回答 3

7

不要使用正则表达式进行解析。使用真正的解析器,如DOMDocumentSimpleXML

$xml = simplexml_load_string('<root>'.$str.'</root>');
于 2009-09-14T16:31:04.557 回答
1

您需要有一个递归匹配模式:

/<dev>(.*|(?R))<\/dev>/i

这只会吸收任何嵌套元素,所以如果你想解析这些,你将不得不在 $matches[1] 上再次运行该函数

于 2010-01-26T14:29:51.783 回答
-1

是一个贪婪的*运算符,消耗尽可能多的字符。您应该使用*?非贪婪版本来查找可能的最小匹配项。也许正则表达式不是做到这一点的最佳工具。

于 2009-09-14T16:21:31.890 回答