例としては:2つの数値の両方に正規表現をマッチさせるにはどうすればよいですか?
01 = match
10 = match
99 = match
00 = no match
これまでのところ私はこれを持っている:/^ [1-9][0-9] | [0-9][1-9] $/
が、私はそれを最適化することができます感じています。
例としては:2つの数値の両方に正規表現をマッチさせるにはどうすればよいですか?
01 = match
10 = match
99 = match
00 = no match
これまでのところ私はこれを持っている:/^ [1-9][0-9] | [0-9][1-9] $/
が、私はそれを最適化することができます感じています。
あなたは、一般的な[0-9]{2}
パターンを制限するために、負の先読みを使用することがあります。
^(?!00)[0-9]{2}$
[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
が望ましい場合があります)。この正規表現を試してみてください:
(?!00)\d\d
これはNegative Lookaheadを使用しています(ここでそれを説明するnice answerがある)、(?!)
。これは存在するものが何であっても一致しないことを意味します。この場合は、00
が存在するかどうかを検出し、存在する場合は失敗します。ない場合は、2桁の数字(\d
が[0-9]
の省略形です)
より安全なバージョンを選択:
^(?!00)\d\d$
をこれもデータがなければならないことを述べて^
を、使用しています文字列(または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
'(?!00)\ D \ D '意志も9900で99にマッチする。 –
@WiktorStribiżew私は2桁しかないと思っていました。特にあなたの答えに '{2}'を使っていたからです。存在する場合、 '9900'は決して存在しません。しかし、私に知らせてくれてありがとう! – Druzion
制限数量子は、入力にいくつの文字が含まれるべきかを示しませんが、前のサブパターンがいくつ一致するかを示します。 –