正则表达式HTML标记

时间:2014-06-04 21:30:54

标签: html regex

我想知道是否存在将以下HTML标记放入正则表达式的方法。我想要的是一个正则表达式,可以匹配所有的开始标记与其对应的结束标记。 如,

<div id="bla">
    <div>
        Hello
    </div>
    <span>
        <span></span>
    </span>
</div>

里面可能有更多标签。 我曾想过这样的事情:^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$/,但它无法奏效。 很抱歉,如果这个问题不属于本节。 谢谢。

2 个答案:

答案 0 :(得分:2)

正则表达式可以解析regular languages

X HTML是context free language,无法通过正则表达式进行解析。无上下文语言的一个示例是 n b n ,它匹配abaabbaaabbb或任何其他字符串a的后跟b s的相同数量。使用pumping lemma可以很容易地显示这种情况。

HTML理想情况下也是一种无上下文的语言,但它很少。 HTML解析器可以接受各种格式不正确的文本,例如<b>foo<i>bar</b></i>,并尝试制作它。

在尝试解析html时,请使用专为处理DOM而不是滚动自己的HTML的HTML解析器。特别是正则表达式。您做错了,因为无法正确完成,然后您将two problems

答案 1 :(得分:0)

您是否还需要regexp方法,但尝试使用PHP Simple HTML DOM ParserHTML Parser等工具解析/查询html页面?

通过这种方式,您可以获得页面代码或内容的一部分,而无需使用正则表达式,并且(这很好)您将能够搜索或获取属性值。