如何为html解析编写正则表达式?

时间:2009-04-27 08:41:21

标签: c++ html regex boost html-content-extraction

我正在尝试为我的html解析器编写正则表达式。

我希望将html标记与包含一个或多个<div>标记的给定属性(例如class="tab news selected"<a href>)匹配。正则表达式应与整个标记匹配(从<div></div>)。我似乎总是得到“内存耗尽”错误 - 我的程序可能会将它可以找到的每个标记作为匹配的标记。

我正在使用boost regex库。

5 个答案:

答案 0 :(得分:7)

你应该看看this question。正则表达式和HTML。要点是使用正则表达式解析HTML绝不是一个理想的解决方案。

答案 1 :(得分:2)

正如其他人所说,如果可能的话,不要使用正则表达式。如果您的代码实际上是XHTML(即它也是格式良好的XML),我可以推荐XercesExpat XML解析器,这将为您提供比正则表达式更好的工作。

答案 2 :(得分:2)

答案 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; /匹配标签。