正则表达式在 html 锚标记内不匹配 [重复]

Posted

技术标签:

【中文标题】正则表达式在 html 锚标记内不匹配 [重复]【英文标题】:Regex to not match inside html anchor tag [duplicate] 【发布时间】:2017-10-04 07:05:02 【问题描述】:

我有一个要求,当出现在锚标记之间时,我不必匹配特定的单词。锚标签可以嵌套其他html标签。

例如:

    <a title="Test" href="http://www.google.com/"><span style="color: blue;">Test</span></a><p>Test - MANUALLY<br /><br /><a href="http://www.google.com">Google</a>&nbsp;</p><p> Resolving as duplicate of Test</p><p>Test  test</p>

这里每个“测试”都会被选中。我想要的只是得到“锚标签”中不存在的“测试”,也不是“锚标签”属性的一部分。

我使用的正则表达式是:

    (?!<a[^>]*>)(Test)(?![^<]*<\/a>)/gi

【问题讨论】:

您需要某种 SAX 解析器来知道打开的锚标记何时开始。首先检查您想要查找的文本内容。当你得到一个打开的锚标记时,忽略涌入的文本内容。等待关闭的锚,然后继续搜索进入的文本内容。 什么编程语言? ***.com/questions/1732348/… @revo 我正在使用 C#。 【参考方案1】:

不确定这是否能满足您的需求,但第二个捕获组应该只包含不属于锚标记的匹配项。

(<a.*?<\/a>)|(test)/gi

https://regex101.com/r/rTLifk/1

但是,我强烈建议使用 XML 解析器或 XPath。

【讨论】:

以上是关于正则表达式在 html 锚标记内不匹配 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式提取特定 HTML 标记中的纯文本 [重复]

re正则匹配模块_python

使用正则表达式的锚标记名称 searchinh

如何在 JavaScript 中的字符串中间进行锚定正则表达式匹配

正则表达式模块

PHP PHP:使用正则表达式从简介中删除锚点和其他标记