匹配不包含所有指定元素的字符串的正则表达式

Regular expression to match strings that do NOT contain all specified elements

我想找到一个正则表达式来匹配不包含所有指定元素的字符串,无论它们的顺序如何。例如,给定以下数据:

one two three four
one three two
one two
one three
four

将单词 two three 传递给正则表达式应该匹配行 one twoone threefour.

我知道如何实现一个表达式来匹配不包含任何单词的行,只匹配行 four:

^((?!two|three).)*$

但对于我描述的情况,我迷路了。

使用此模式:

(?!.*two.*three|.*three.*two)^.*$

Demo

问得好。看起来您正在寻找一些 AND 逻辑。我相信有人能想出更好的办法,但我想到了两种方法:

^(?=(?!.*\btwo\b)|(?!.*\bthree\b)).*$

在线查看demo

或:

^(?=.*\btwo\b)(?=.*\bthree\b)(*SKIP)(*F)|^.*$

在线查看demo

在这两种情况下,我们都使用积极的前瞻来模仿 AND 逻辑,以防止 both 单词出现在文本中,而不管它们在完整字符串中的位置。如果只存在这些单词之一,则字符串将通过。