正则表达式匹配除两个单词以外的任何内容

Regex to match anything except for two words

我已经阅读了很多类似的问题并且我自己也尝试了很多东西,但是我还没有找到解决这个问题的方法。我有两个字符串 - "foo" 和 "foobar" - 可能出现在一行的开头,可能用分号括起来,可能出现在行尾,或者可能是唯一的字符串在行中。如果我的单行文本包含以下任何内容,我希望 not 匹配该行。

^foo$
^foobar$
;foo$
;foobar$
.*;foo;.*
.*;foobar;.*
^foo;.*
^foobar;.*

(^表示行首,$表示行尾,;是分号的字面匹配,.*表示任意字符。)

对于其他任何事情,我都想匹配该行。例如:

baz;quz        - regex should match the line
baz;foo;qux    - regex should not match the line
foobar;baz     - regex should not match the line
foobaz;bar     - regex should match the line
baz;qux;foobar - regex should not match the line

我有一个应用程序,如果有匹配项就会执行操作,如果没有匹配项则不会执行该操作。因此,如果包含 foo 或 foobar,我不希望进行任何匹配。

到目前为止我想出的最接近的是:

(;|^)(?!foo(;|$|bar(;|$))).*$

但这仍然匹配 baz;foo;qux 因为“;”在开头和“.*”在结尾。我还没弄清楚如何让它工作...

感谢您提供的任何帮助。

-乔恩

^(?!foo\b|foobar\b)(?!.*;foo;)(?!.*;foobar;).*(?<!\bfoo)(?<!\bfoobar)$

尝试 this.This 应该为 you.See 演示做。

https://regex101.com/r/sH8aR8/45

您可以使用这个基于否定前瞻的正则表达式进行匹配:

^(?:(?!(?:;|^)foo(?:bar)?(?=;|$)).)*$

RegEx Demo