我正在尝试为我的 html 解析器编写一个正则表达式。
我想将 html 标签与包含一个或多个标签的给定属性(例如<div>
with )匹配。正则表达式应该匹配整个标签(从到)。我似乎总是遇到“内存耗尽”错误——我的程序可能会将它可以找到的每个标签都当作匹配的标签。class="tab news selected"
<a href>
<div>
</div>
我正在使用 boost 正则表达式库。
我正在尝试为我的 html 解析器编写一个正则表达式。
我想将 html 标签与包含一个或多个标签的给定属性(例如<div>
with )匹配。正则表达式应该匹配整个标签(从到)。我似乎总是遇到“内存耗尽”错误——我的程序可能会将它可以找到的每个标签都当作匹配的标签。class="tab news selected"
<a href>
<div>
</div>
我正在使用 boost 正则表达式库。
你可能应该看看这个问题。正则表达式和 HTML。要点是使用正则表达式解析 HTML 绝不是理想的解决方案。
也许正则表达式不是最好的解决方案,但我已经在使用五个不同的库,并且在定位<a href>
标签和关键字方面,boost 做得很好。
我正在使用这些正则表达式:
/<a[^\n]*/searched attribute/[^\n]*>[^\n]*</a>/
用于定位<a href>
标签和:
/<a[^\n]*href[[^\n]*>/searched keyword/</a>/
用于定位链接
(顺便说一句,它可以做得更好吗?-我很讨厌正则表达式;))
我现在需要的是定位包含<a href>
's 的标签,我认为正则表达式会做得很好——也许我需要像 piotr 所说的那样编写自己的解析函数。
像 flex 那样做:匹配 <div> 与不区分大小写的匹配,并将解析器置于“div 匹配”状态,继续处理输入直到 </div> 并重置状态。
这需要两个正则表达式和一个状态变量。
SGML 标记的有效字符为 [A-Za-z_:]
所以: /<[A-Za-z_:]+>/ 匹配一个标签。