正则表达式匹配除“000”“001”和“002”之外的3个字母数字字符

时间:2012-12-18 16:41:56

标签: c# .net regex

我需要一个匹配任意3个字母数字字符的模式(如[0-9A-Z] {3}),但不包括000 001 002

AAA - pass
003 - pass
123 - pass
000 - fail
001 - fail
002 - fail

更新:对不完整的问题抱歉。 3个字母数字实际上是较大模式的一部分:QUEO_BK20 \ d {2}(0 [1-9] | 1 [012])(0 [1-9] | [12] [0-9] | 3 [01] )(?00 [012])的 [0-9A-Z] {3} 的.csv

像(?!00 [012])[0-9A-Z] {3}这样的模式仅适用于3个字符,但不作为整个模式的一部分。

我正在使用.NET

4 个答案:

答案 0 :(得分:3)

如果您的正则表达式引擎支持它,请使用前瞻断言:

(?!00[012])[0-9A-Z]{3}

答案 1 :(得分:1)

您可以包含负面预测,例如

(?!000|001|002)[0-9A-Z]{3}

答案 2 :(得分:1)

两种模式最简单:

if (/^[0-9A-Z]{3}\z/ && !/^00[0-2]\z/)

或者如果你想要一个真正的正则表达式:

[1-9A-Z][0-9A-Z]{2}|0[1-9A-Z][0-9A-Z]|00[3-9A-Z]

答案 3 :(得分:0)

并非所有编程逻辑都需要在正则表达式中。您可以让主编程逻辑也能正常工作。

在Perl中执行此操作的代码,但您明白了这一点:

if ( $x =~ /^[0-9A-Z]{3}$/ && $x !~ /^00[012]$/ ) {
    # passed...

=~表示“匹配”,!~表示“不匹配”。我认为意图比任何涉及负面前瞻的事情都要清晰得多。