1

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

例如,列表包含

aaa aab aac dvs efg

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

aa 
a
aae

但我希望它在完全匹配时失败,例如值 aaa aab

我试过类似的东西:

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

但这不起作用,它发现'aa'、'aaa'、'aab'(例如)都不匹配。我不希望 'aa' 不匹配。aa 应该匹配,因为它不完全等于列表中的字符串之一。

4

2 回答 2

2

这个正则表达式应该适合你:

^(?!\b(?:aaa|aab|aac|dvs|efg)\b).*$

说明:使用负前瞻匹配一个不完全在给定字符串列表中的字符串。

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

于 2013-04-10T19:57:09.123 回答
2

您使用的语法是获取与指定字符匹配的字符。

您正在寻找的是负前瞻

它可以这样使用:

^(?:(?!^(aaa|aab|aac|dvs|efg)$).)*$

此外,正如其他人所提到的,始终确保您确实需要使用 RegEx(很难理解为什么您会被迫使用除家庭作业之外的特定技术)。

以下是 C# 中此问题的示例:

使用内置Collection方法的版本需要 1.59 秒和 1 行独特的、可理解的代码。

使用 RegEx 的版本需要 4.55 秒,包含 3 行独特、更复杂的代码。

于 2013-04-10T19:37:21.077 回答