preg_match用于嵌套的html标记

时间:2009-09-14 16:16:41

标签: php regex nested preg-match

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

数据:

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

到目前为止

我的表达:

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

谢谢你的帮助, 湾

3 个答案:

答案 0 :(得分:7)

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

$xml = simplexml_load_string('<root>'.$str.'</root>');

答案 1 :(得分:1)

您需要具有递归匹配模式:

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

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

答案 2 :(得分:0)

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