我正在尝试为我的html解析器编写正则表达式。
我希望将html标记与包含一个或多个<div>
标记的给定属性(例如class="tab news selected"
与<a href>
)匹配。正则表达式应与整个标记匹配(从<div>
到</div>
)。我似乎总是得到“内存耗尽”错误 - 我的程序可能会将它可以找到的每个标记作为匹配的标记。
我正在使用boost regex库。
答案 0 :(得分:7)
你应该看看this question。正则表达式和HTML。要点是使用正则表达式解析HTML绝不是一个理想的解决方案。
答案 1 :(得分:2)
答案 2 :(得分:2)
您可能还会发现这些问题很有用:
Can you provide some examples of why it is hard to parse XML and HTML with a regex?
Can you provide an example of parsing HTML with your favorite parser?
答案 3 :(得分:1)
也许正则表达式不是最好的解决方案,但我已经使用了五个不同的库,并且在查找<a href>
标签和关键字时提升效果很好。
我正在使用这些正则表达式:
/<a[^\n]*/searched attribute/[^\n]*>[^\n]*</a>/
用于查找<a href>
代码和:
/<a[^\n]*href[[^\n]*>/searched keyword/</a>/
用于查找链接
(顺便说一句,它可以做得更好吗? - 我吮吸正则表达式;))
我现在需要的是找到包含<a href>
的标签,我认为正则表达式会做得很好 - 也许我需要编写自己的解析函数,正如piotr所说。
答案 4 :(得分:0)
做flex时:匹配&lt; div&gt;使用不区分大小写的匹配,并将解析器置于“div匹配”状态,继续处理输入,直到&lt; / div&gt;并重置状态。
这需要两个正则表达式和一个状态变量。
SGML标签有效字符为[A-Za-z _:]
所以:/&lt; [A-Za-z _:] +&gt; /匹配标签。