如何测试一个字符串是否不包含两个给定子字符串?

How to test if a string doesn't contain BOTH of two given substrings?

我需要提供一个正则表达式,它只接受不具有以下两个子字符串的 both 的字符串:“string1”、“string2”。也就是说,如果两个字符串都没有,或者只有其中一个,则应该匹配。

注意,这不是 regex-for-a-string-to-not-contain-two-different-strings 的副本,如果找到两个子字符串的 either,它要求正则表达式拒绝字符串,而我需要一个拒绝的解决方案仅当两个子字符串的 both 存在时的字符串。

我试过:

(?!=.*?(string1))(?!=.*?(string2))
^(?!.*(?=string1)(?=string2)).*$
^(?!.*(string1&string2)).*$
^((?!string1&&string2).)*$

正确的解决方案应该找到匹配(即接受)以下字符串:

abcd
string1
abcd,string1
string1,abcd
abcd,string2
string2,abcd

但应该找不到(即拒绝)以下内容的匹配项:

string1,string2
string2,string1
string1,abcd,string2
string2,abcd,string1

谢谢!

您可以使用以下模式:

^(?:(?!.*string1)|(?!.*string2)).+$

Demo.

细分:

  • ^ 字符串开始。
  • (?: 非捕获组的开始。
    • (?!.*string1) 确保“string1”不存在。
    • | 或者...
    • (?!.*string2) ..“string2”不存在。
  • )关闭非捕获组
  • .+匹配一个或多个字符。
  • $ 字符串结束。