如果字符串与其他字符串列表不完全匹配,我希望regEx返回true。使用RegEx可能有更好的方法来实现这一点,但就我的目的而言,我需要使用正则表达式进行验证。
例如,列表包含
aaa aab aac dvs efg
我希望表达式匹配,如果我输入例如:
aa
a
aae
但我希望它在价值方面完全匹配时失败 AAA AAB
我尝试过类似的事情:
[^aaa|aab|aac|dvs|efg]
但那不起作用,它发现' aa' aaa',' aab' (例如)都不匹配。 我不想要' aa'不是一场比赛。 aa应该匹配,因为它不等于列表中的一个字符串。
答案 0 :(得分:2)
您使用的语法是获取与指定字符匹配的字符。
您要找的是negative lookahead
可以像这样使用:
^(?:(?!^(aaa|aab|aac|dvs|efg)$).)*$
另外,正如其他人提到的那样,总是要确保你真的需要使用RegEx(很难理解为什么你会被迫使用除了家庭作业之外的特定技术)。
以下是C#中此问题的一个示例:
Version using built in Collection
methods需要1.59秒,并且有一行独特,可理解的代码。
Version using RegEx需要4.55秒,包含3条独特,更复杂的代码行。
答案 1 :(得分:2)
这个正则表达式适合你:
^(?!\b(?:aaa|aab|aac|dvs|efg)\b).*$
说明:使用否定前瞻匹配不完全位于给定字符串列表中的字符串。