问题描述
我需要一个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