【发布时间】:2009-10-02 14:24:03
【问题描述】:
我有一个相当长且复杂的 HTML 文档,我需要找到给定字符串的所有出现,例如"foobar",除非它在 <a> 和 </a> 锚标记之间。
问题是:它可能在锚标签之间的一些文本中,例如
<a>this is a foobar test</a>
即使在这种情况下,我也不应该找到匹配项。
我怎样才能用正则表达式做到这一点?我可以毫不费力地找到<a>foobar</a> 等等 - 但是找到每个“foobar” except 当它位于锚标记之间并且被可能的许多其他文本包围时似乎有点棘手...... .
有什么想法吗??
回答:
我们最终使用这个正则表达式来解决这个问题——以防万一有人a)好奇,或者b)在同一个地方:-)
(?<!\<A.*(?=\<\/A))Test(?!\<\/A.*(?=\<A))
【问题讨论】:
-
正如 Bart 评论的那样,用于解析 HTML 的正则表达式解决方案要么在某些情况下(嵌入标签)失败,要么极其复杂。考虑使用 DOM 解析器来查找锚标记中的所有文本,然后对其进行字符串搜索或正则表达式。
-
更正 - 使用 DOM 搜索不包含在锚标记中的文本节点。
标签: regex regex-negation dom