連続する 2 文字を数字として含まない文字列を検索/照合したい。
たとえば、次の文字列では:
12ab
1ab2
1a2b
ab12
2 弦と 3 弦の 1ab2 と 1a2b を選択したいと思います。
何時間もマッチャー正規表現を書こうとしてきました:(
あなたの助けは大歓迎です..
最も簡単なことは次のようなものです
if ( ! myString.matches( ".*\\d\\d.*" ))
しかし、実際の正規表現が必要な場合は、外部に "not" ロジックがなくても、常に
"\\D*(\\d\\D+)*\\d?"
これは、任意の数の「数字」文字 ( ) に一致します。ただし、各文字の後に次の数字の前に\d
1 つ以上の「非数字」文字 ( ) が続く場合に限ります。\D
必要に応じて、先頭に数字以外の文字をいくつか含めることができ、最後にさらに 1 つの数字を追加することもできます。
この先読みベースの正規表現を使用できます。
"^((?!\\d{2}).)*$"
"11ab2".matches("^((?!\\d{2}).)*$"); // false
"1pab2".matches("^((?!\\d{2}).)*$"); // true
"1pa52".matches("^((?!\\d{2}).)*$"); // false
(?!\\d{2}).
は、2 桁の数字が続かない文字に一致することを意味します。
2 つの連続した数字がない場合に一致する正規表現が必要な場合 (2 つの連続した数字がある場合に一致するマッチャーを作成してから を使用するのとは対照的に!
)、少なくともいくつかの可能性があります。
(1) 否定先読み:
if (myString.matches ("^(?!.*\\d\\d).*"))
マッチャーに、「任意の文字列の後に 2 桁の数字が続くパターンが続いていない文字列の先頭を見つけることができれば、一致させてください」と伝えています。
(2) ブルートフォース:
if (myString.matches ("\\D*(\\d\\D+)*\\d?"))
\\D
数字以外のすべてに一致します。これは、ソースに表示される数字の後に数字以外の数字または文字列の末尾が続く必要があるように設定されています。
編集: 以前のバージョンには^
とがありまし$
た。これは、 を使用している場合は必要ですが、 を使用している場合は必要ありfind
ませんmatches
。