2016-04-05 10 views

答えて

6

あなたは、一般的な[0-9]{2}パターンを制限するために、負の先読みを使用することがあります。

^(?!00)[0-9]{2}$ 

regex demo

[0-9]{2}は正確に2桁の数字と一致しますを参照してください。 (?!00)negative lookaheadは、文字列の先頭で1回実行され、文字列が終わるまで00が存在しないことを確認します。文字列が00に等しい場合、一致するものは見つかりません。

詳細はHow Negative Lookahead Worksをご覧ください。

詳細なパターンの説明:

  • ^ - 文字列の先頭
  • (?!00) - 文字列の先頭に(現在位置の後に2つの0の権利がある場合は試合を失敗否定先読み)。次のサブパターン - [0-9]{2}$ - 文字列内に2つのシンボルしか使用できないため、先読みにアンカーを追加する必要はありません。を追加して00を除外する必要があります。
  • [0-9]{2} - 丁度2(制限数量詞{min(,max)?}のおかげで)数字(ほとんどの味で、[0-9]\dに置き換えることができ、それ\dも味の一部に[]定期以上を一致させることができます)
  • $ - エンド(正規表現フレーバーに応じて、の最後の文字列のに一致するので、\zが望ましい場合があります)。
1

この正規表現を試してみてください:

(?!00)\d\d 

Live Demo on Regex101

これはNegative Lookaheadを使用しています(ここでそれを説明するnice answerがある)、(?!)。これは存在するものが何であっても一致しないことを意味します。この場合は、00が存在するかどうかを検出し、存在する場合は失敗します。ない場合は、2桁の数字(\d[0-9]の省略形です)


より安全なバージョンを選択:

^(?!00)\d\d$ 

Live Demo on Regex101

をこれもデータがなければならないことを述べて^を、使用しています文字列(またはmフラグのある行)の先頭に、$のデータが最後になければなりません。したがって、あなたが^ $を使用する場合、内部のデータは、フルライン/文字列に一致している必要があり


ここでは否定先読みのいくつかの例は以下のとおりです。

# Using the RegEx (?!9)\d 
1 # Match 
2 # Match 
5 # Match 
9 # NO MATCH 

# Using the RegEx (?!Tom)\w+ 
Tim # Match 
Joe # Match 
Bob # Match 
Tom # NO MATCH 

# Using the RegEx (?!Foo)\w+(?!Bar) 
BarBazFoo # Match 
BazBarFoo # Mtach 
FooBarBaz # NO MATCH 
BazFooBar # NO MATCH 
+0

'(?!00)\ D \ D '意志も9900で99にマッチする。 –

+0

@WiktorStribiżew私は2桁しかないと思っていました。特にあなたの答えに '{2}'を使っていたからです。存在する場合、 '9900'は決して存在しません。しかし、私に知らせてくれてありがとう! – Druzion

+0

制限数量子は、入力にいくつの文字が含まれるべきかを示しませんが、前のサブパターンがいくつ一致するかを示します。 –

関連する問題