Regex 如何编写正则表达式来查找NOT string1和NOT string2?

Regex 如何编写正则表达式来查找NOT string1和NOT string2?,regex,Regex,如果两个字符串不在测试字符串中,我希望正则表达式返回正匹配。比如说, ^((?!string1).)*$ 如果测试字符串中不包含string1,则将匹配。如果字符串不包含string1且不包含string2,我如何编写此代码来测试该字符串?您就快到了: ^((?!string1|string2).)*$ 您可以将|字符用作负前瞻中的OR,以便在匹配任一字符串时失败 请注意,您也可以这样重写此特定示例: ^((?!string[12]).)*$ ^(?!.*string1)(?!.*stri

如果两个字符串不在测试字符串中,我希望正则表达式返回正匹配。比如说,

^((?!string1).)*$
如果测试字符串中不包含
string1
,则将匹配。如果字符串不包含
string1
且不包含
string2
,我如何编写此代码来测试该字符串?

您就快到了:

^((?!string1|string2).)*$
您可以将
|
字符用作负前瞻中的OR,以便在匹配任一字符串时失败

请注意,您也可以这样重写此特定示例:

^((?!string[12]).)*$
^(?!.*string1)(?!.*string2).*$
我的假设是,您的实际用例不会那么琐碎,因此使用
|
是更通用的解决方案。

您几乎做到了:

^((?!string1|string2).)*$
您可以将
|
字符用作负前瞻中的OR,以便在匹配任一字符串时失败

请注意,您也可以这样重写此特定示例:

^((?!string[12]).)*$
^(?!.*string1)(?!.*string2).*$

我的假设是,您的实际用例不会那么琐碎,因此使用
|
是更通用的解决方案。

您甚至不应该为此需要正则表达式,像“子字符串索引”这样的函数肯定存在于您正在使用的语言中

如果您确实需要正则表达式进行匹配,请不要过度设计,并使用您的语言功能:

if (!(str =~ /regex/) && !(str =~ /regex/))
{
    ...

你甚至不需要正则表达式,像“子字符串索引”这样的函数肯定存在于你正在使用的语言中

如果您确实需要正则表达式进行匹配,请不要过度设计,并使用您的语言功能:

if (!(str =~ /regex/) && !(str =~ /regex/))
{
    ...

另一个选项是使用
(?!)
作为查找工具。大概是这样的:

^((?!string[12]).)*$
^(?!.*string1)(?!.*string2).*$

另一个选项是使用
(?!)
作为查找工具。大概是这样的:

^((?!string[12]).)*$
^(?!.*string1)(?!.*string2).*$

string1和string2必须具有相同的长度,但如果string1和string2没有相同的长度,这是一个问题,因为在这种情况下,限制只适用于LookBehind,而不适用于LookBehind。string1和string2必须具有相同的长度,尽管string1和string2没有相同的长度是一个问题,因为它在这种情况下不起作用,所以限制只适用于lookbehind,而不是lookahead。