regex - 捕获不属于链接的特定单词的所有出现

标签 regex pcre

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

\bapple\b

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

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

我做错了什么?

最佳答案

在 PCRE 中,你可以使用这个正则表达式:

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

RegEx Demo

正则表达式详细信息:

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

关于regex - 捕获不属于链接的特定单词的所有出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66075884/

相关文章:

javascript - 正则表达式查找句子中的最后一个单词

python - 如何将正则表达式与 pandas.Series.str.replace() 一起使用

regex - 将货币与括号中的负数或前缀为 "-"的货币相匹配

C++ - 如何在 DevC++ 中使用 PCRE

.net - 将PCRE递归正则表达式模式转换为.NET平衡组定义

php - 在 PHP 中将 POSIX 模式转换为 PCRE(eregi 到 preg_match)

python - 简单的Python重新前瞻帮助

javascript - 查找并替换具有当前焦点的子字符串

php - 如何在 PHP 中将 ereg 表达式转换为 preg?

REGEX 捕获不同组的重复组