2

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

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

我正在使用 boost 正则表达式库。

4

5 回答 5

7

你可能应该看看这个问题。正则表达式和 HTML。要点是使用正则表达式解析 HTML 绝不是理想的解决方案。

于 2009-04-27T08:46:58.570 回答
2

正如其他人所说,尽可能不要使用正则表达式。如果您的代码实际上是 XHTML(即它也是格式良好的 XML),那么我可以推荐XercesExpat XML 解析器,它们比正则表达式对您的工作要好得多。

于 2009-04-27T08:53:23.483 回答
2

您可能还会发现这些问题很有帮助:

您能否提供一些示例说明为什么使用正则表达式难以解析 XML 和 HTML?

你能提供一个用你最喜欢的解析器解析 HTML 的例子吗?

于 2009-04-27T20:26:52.943 回答
1

也许正则表达式不是最好的解决方案,但我已经在使用五个不同的库,并且在定位<a href>标签和关键字方面,boost 做得很好。

我正在使用这些正则表达式:

/<a[^\n]*/searched attribute/[^\n]*>[^\n]*</a>/用于定位<a href>标签和:

/<a[^\n]*href[[^\n]*>/searched keyword/</a>/用于定位链接

(顺便说一句,它可以做得更好吗?-我很讨厌正则表达式;))

我现在需要的是定位包含<a href>'s 的标签,我认为正则表达式会做得很好——也许我需要像 piotr 所说的那样编写自己的解析函数。

于 2009-04-27T13:08:14.730 回答
0

像 flex 那样做:匹配 <div> 与不区分大小写的匹配,并将解析器置于“div 匹配”状态,继续处理输入直到 </div> 并重置状态。

这需要两个正则表达式和一个状态变量。

SGML 标记的有效字符为 [A-Za-z_:]

所以: /<[A-Za-z_:]+>/ 匹配一个标签。

于 2009-04-27T10:44:35.540 回答