什么正则表达式 (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
这里是对所用正则表达式模式的解释:
\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
我需要有关 PCRE 正则表达式的帮助,该正则表达式将在多行文件中找到两次出现的单词,但它们之间没有特定单词。
下面的第一个示例应该匹配,因为“foo”出现了两次,中间没有单词“bar”,而第二个示例不应该匹配,因为“foo”出现了两次,中间有单词“bar”。
匹配示例:
foo
跳了
超过
懒惰
foo
不匹配示例:
foo
跳了
超过
栏
foo
您的问题以前可能有人问过,尽管可能不是完全相同的方式。这里的一种方法是在 foo
的出现之间进行匹配时使用调和点,以确保我们不会在整个过程中跨越 bar
。尝试 运行 以下启用全点模式的正则表达式:
\bfoo\b((?!\bbar\b).)*?\bfoo\b
这里是对所用正则表达式模式的解释:
\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