我想知道是否存在将以下HTML标记放入正则表达式的方法。我想要的是一个正则表达式,可以匹配所有的开始标记与其对应的结束标记。 如,
<div id="bla">
<div>
Hello
</div>
<span>
<span></span>
</span>
</div>
里面可能有更多标签。
我曾想过这样的事情:^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$/
,但它无法奏效。
很抱歉,如果这个问题不属于本节。
谢谢。
答案 0 :(得分:2)
正则表达式可以解析regular languages。
X HTML是context free language,无法通过正则表达式进行解析。无上下文语言的一个示例是 n b n ,它匹配ab
,aabb
,aaabbb
或任何其他字符串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 Parser或HTML Parser等工具解析/查询html页面?
通过这种方式,您可以获得页面代码或内容的一部分,而无需使用正则表达式,并且(这很好)您将能够搜索或获取属性值。