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

时间:2015-01-09 18:23:33

标签: regex

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

^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因为“;”在开头和“。*”在结尾。我还没弄清楚如何让它工作......

感谢您提供任何帮助。

-Jon

2 个答案:

答案 0 :(得分:1)

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

试试这个。这应该为你做。参见演示。

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

答案 1 :(得分:1)

您可以将这种基于正面的负面前瞻性用于匹配:

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

RegEx Demo