我需要一个匹配任意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
答案 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...
=~
表示“匹配”,!~
表示“不匹配”。我认为意图比任何涉及负面前瞻的事情都要清晰得多。