如何测试一个字符串是否不包含两个给定子字符串?
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”不存在。
)
关闭非捕获组
.+
匹配一个或多个字符。
$
字符串结束。
我需要提供一个正则表达式,它只接受不具有以下两个子字符串的 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”不存在。
)
关闭非捕获组.+
匹配一个或多个字符。$
字符串结束。