首页 > 解决方案 > 捕获不属于链接的特定单词的所有出现

问题描述

我正在尝试使用来自 HTML 文本的 PCRE2 方言的正则表达式来获取所有出现的单词“apple”。但不包括苹果这个词是链接的一部分。
我是 Regex 的初学者,可能我犯了一个非常简单的错误。

\bapple\b

因此,以下文本必须匹配第一个匹配项,但不能匹配第二个和第三个匹配项。

Lorem ipsum apple sit amet, consectetur <a href="#">apple</a> elit <a href="/test/apple">lorem</a>. 

我究竟做错了什么?

标签: regexpcre

解决方案


在 PCRE 中,您可以使用此正则表达式:

~(?is)<a .*?</a>(*SKIP)(*F)|\bapple\b~

正则表达式演示

正则表达式详细信息:

  • (?is): 启用忽略大小写和 DOTALL 模式
  • <a .*?</a>:匹配文本从<a</a>跳过所有<a>标签
  • (*SKIP)(*F):一起提供了一个很好的限制替代方案,您不能在 PCRE 正则表达式中进行可变长度的lookbehind
  • |: 或者
  • \bapple\b: 匹配词apple

推荐阅读