0

我需要一个匹配任何 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

4 回答 4

3

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

(?!00[012])[0-9A-Z]{3}
于 2012-12-18T16:43:25.240 回答
1

您可能会包含一个负面的前瞻性,例如

(?!000|001|002)[0-9A-Z]{3}
于 2012-12-18T16:45:15.207 回答
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]
于 2012-12-18T16:46:33.913 回答
0

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

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

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

=~表示“匹配”和!~表示“不匹配”。我建议其意图比任何涉及负面前瞻性的事情都要清楚得多。

于 2012-12-18T16:47:58.107 回答