PHP正则表达式:如果忽略HTML的结束标记

时间:2014-01-15 22:48:46

标签: php html regex

我似乎无法让这个工作,我希望得到一些帮助。

我正在尝试捕获特定div 的内容(请保存DOM说话,出于特定目的,它并没有真正发挥作用。)

问题是,如果在同一行上有另一个带有属性的div,我似乎无法使其工作。如果><div之间没有class="myClass",我尝试仅指定匹配,但我认为我做错了。

我仍然对正则表达式感到困惑。

/<div(?!>).*?class="myClass".*?>(.*?)<\/div>/mi

(半)工作示例: http://regex101.com/r/cW0lW6

3 个答案:

答案 0 :(得分:0)

尝试

/<div(?=\s)(?:(?!>).)+?class="myClass".*?>(.*?)<\/div>/si

答案 1 :(得分:0)

  

您无法使用正则表达式解析[X] HTML。因为HTML无法解析   正则表达式。正则表达式不是可用于正确解析HTML的工具。

请参阅:RegEx match open tags except XHTML self-contained tags

我建议使用QueryPath在PHP中解析XML和HTML。它与jQuery的语法基本相同,只是在服务器端。

答案 2 :(得分:-2)

您可以使用此(简单方法):

~<div[^>]+?class="myClass"[^>]*>(.*?)</div>~si

或者这个(如果你有很多属性,会更有效):

~<div(?>[^>c]++|\Bc|c(?!lass=))+class="myClass"[^>]*+>(.*?)</div>~si

请注意,如果div标记包含另一个div标记,则这些模式不起作用。