0

任意の3文字の英数字([0-9A-Z] {3}など)に一致するが、000001002を除くパターンが必要です。

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

2つのパターンで最も簡単:

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 に答える