RegEx - 如果不在列表中,则为True

时间:2013-04-10 19:28:00

标签: regex

如果字符串与其他字符串列表不完全匹配,我希望regEx返回true。使用RegEx可能有更好的方法来实现这一点,但就我的目的而言,我需要使用正则表达式进行验证。

例如,列表包含

aaa aab aac dvs efg

我希望表达式匹配,如果我输入例如:

aa 
a
aae

但我希望它在价值方面完全匹配时失败   AAA   AAB

我尝试过类似的事情:

[^aaa|aab|aac|dvs|efg]

但那不起作用,它发现' aa' aaa',' aab' (例如)都不匹配。 我不想要' aa'不是一场比赛。 aa应该匹配,因为它不等于列表中的一个字符串。

2 个答案:

答案 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).*$

说明:使用否定前瞻匹配不完全位于给定字符串列表中的字符串。

现场演示:http://www.rubular.com/r/BMuCk5S6PJ