如何匹配整个html元素,无论内部是什么,就像浏览器一样?

时间:2010-08-11 08:33:34

标签: php html regex preg-match-all

在给定页面上有许多元素:

<div class="some class"> <-- here is anything, other divs, even other divs with
the same class, but I need to match right on closing tag for this particular
opening tag --></div>

4 个答案:

答案 0 :(得分:6)

答案 1 :(得分:3)

答案 2 :(得分:1)

正则表达式描述常规语言的操作。 HTML不是常规语言。我准备打赌你可以用一个所谓的“递归正则表达式”来做,因为它们不是真正的正则表达式,并且不限于常规语言。我打算更多地打赌,无论如何你最好还是解析它。

简单(不是最好的,但最容易在几行中编码),是为了保持内部div的数量。每当遇到div标签时,都要计算。当你遇到一个结束div标签时,如果它不为零,你就放弃计数,或者你找到了你的完整元素。每当你遇到文件的结尾时,有人都没有正确关闭他们的div。

如果你可以依赖于格式良好的代码(如果你不能,你有两个问题......)或者准备在非non的情况下只是错误,那么使用XML解析器会更容易 - 良好的投入。

答案 3 :(得分:0)

唯一可靠的解决方案是解析HTML,regexp在所有情况下都无法解决这个问题。

事实上,浏览器通常非常宽容,甚至可以应对错误,例如缺失

  

&LT; / P&gt;

标记。所以处理任意页面实际上非常棘手。

如果您正在处理自己制作的页面,那么也许您可以编写一些特殊情况的regexp。否则,您可能需要寻找一个真正的解析器,例如this。 (从来没有用过它,但它可能就是你所需要的。)