什么正则表达式 (PCRE) 会发现两次出现的特定单词之间不包含特定单词?

What regular expression (PCRE) will find two occurrences of a specific word that do not contain a specific word between them?

我需要有关 PCRE 正则表达式的帮助,该正则表达式将在多行文件中找到两次出现的单词,但它们之间没有特定单词。

下面的第一个示例应该匹配,因为“foo”出现了两次,中间没有单词“bar”,而第二个示例不应该匹配,因为“foo”出现了两次,中间有单词“bar”。

匹配示例:

foo
跳了
超过

懒惰
foo

不匹配示例:

foo
跳了
超过


foo

您的问题以前可能有人问过,尽管可能不是完全相同的方式。这里的一种方法是在 foo 的出现之间进行匹配时使用调和点,以确保我们不会在整个过程中跨越 bar。尝试 运行 以下启用全点模式的正则表达式:

\bfoo\b((?!\bbar\b).)*?\bfoo\b

Demo

这里是对所用正则表达式模式的解释:

\bfoo\b           match an initial "foo"
((?!\bbar\b).)*?  match any content, including across newlines, provided
                  that we do not pass "bar" along the way
\bfoo\b           match a final "foo"

如果您没有可用的全点模式,您可以使用类似的模式来模拟它:

\bfoo\b((?!\bbar\b)[\s\S])*?\bfoo\b