【问题标题】:preg_match for nested html tagspreg_match 用于嵌套的 html 标签
【发布时间】:2009-09-14 16:16:40
【问题描述】:

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

数据:

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

我目前的表情:

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

感谢您的帮助, b.

【问题讨论】:

  • 不要使用正则表达式进行解析。请改用真正的解析器。
  • 好吧,如果他想解析常规语言,应该没问题。但总的来说,是的。对于 HTML/XML 等尤其如此。

标签: php regex nested preg-match


【解决方案1】:

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

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

【讨论】:

【解决方案2】:

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

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

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

【讨论】:

  • 你应该使用 / 或 # 作为你的 preg 分隔符,| (管道)字符用于交替匹配
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 2010-12-15
    • 1970-01-01
    相关资源
    最近更新 更多