哪种正则表达式PCRE将发现两次出现的特定单词之间没有特定单词?

问题描述

我需要一个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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...