正确嵌套的html上的正则表达式(或更好的建议)

时间:2011-03-02 00:35:41

标签: php html regex html-parsing

我看过一下,似乎没有任何旧问题直接解决这个问题。我还没有在其他任何地方找到明确的解决方案。

我需要一种匹配标记的方法,打开以关闭,并返回标记所包含的所有内容。我试过的正则表达式在嵌套标签时会出现问题。例如,正则表达式<tag\b[^>]*>(.*?)</tag>会导致<tag>Some text <tag>that is nested</tag> in tags</tag>出现问题。它将匹配<tag>Some text <tag>that is nested</tag>

我正在寻找解决方案。理想情况下是一个有效的。我已经看到了解决方案,分别涉及开始和结束标签的匹配,并在内容中跟踪他们的索引,以确定哪些标签在一起,但这对我来说似乎非常低效(如果这是唯一可能的方式,那么c'est la vie )。

解决方案必须只是PHP,因为这是我必须使用的语言。我正在解析html片段(想想一个wordpress博客的身体部分,你也不会太离谱)。如果有一个比正则表达式更好的解决方案,我全都耳朵!

更新:

为了说清楚,我知道正则表达式是一个糟糕的解决方案,但我必须以某种方式这样做,这就是为什么标题特别提到了更好的解决方案。

进一步更新:

我正在解析片段。解决方案应考虑到这一点。如果解析器仅适用于完整文档或者要添加<head>等...当我将html取回时,这不是一个可接受的解决方案。

2 个答案:

答案 0 :(得分:2)

与往常一样,您无法使用正则表达式解析HTML,因为它不是常规语言。您需要编写一个真正的HTML解析器,或者使用一个真正的HTML解析器(某人已经写过)。由于明显的原因,我推荐后一种选择。

相关问题

答案 1 :(得分:1)

为什么不使用DOMDocument::loadHTML?它在引擎盖下使用libxml,速度快而且健壮。