RegExで11個の隣接する(つまり、間に他の文字がない11桁)桁を検出するにはどうすればよいですか?
つまり、一致する必要がasd 12345678901 asd 11
あり、AA12345678901as
ただし、12 の隣接する数字があるためではありません asd 123456789012 asd 11
やってみ(^[0-9])*(\d{11})(^[0-9])*
たけど合ってるasd 123456789012 asd 11
RegExで11個の隣接する(つまり、間に他の文字がない11桁)桁を検出するにはどうすればよいですか?
つまり、一致する必要がasd 12345678901 asd 11
あり、AA12345678901as
ただし、12 の隣接する数字があるためではありません asd 123456789012 asd 11
やってみ(^[0-9])*(\d{11})(^[0-9])*
たけど合ってるasd 123456789012 asd 11
を試してください\b\d{11}\b
。これは、11 桁の周囲に単語境界を指定するため、12 桁のうち最初の 11 桁と一致しません。
これは、ルックアラウンドで行うことができます。
(?<!\d)\d{11}(?!\d)
正確に11桁のシーケンスに一致し、前後に他の数字がないことを確認できます(ただし、アルファベット、スペースなど、他の文字でもかまいません)。
したがって、これらの文字列には一致が含まれていると見なされjhgjad12345678901
ます:、、、、、12345678901
12345678901skjdhks
sdfjhsdf 12345678901 sdfjgj 2342 sdkfl
=-=342_12345678901:}{]'
または別の方法で、見回す必要はありません。
(?:\D|^)(\d{11})(?:\D|$)
11桁の番号はキャプチャグループ1に含まれます。
上記の正規表現でメソッドを使用IsMatch
して、文字列が正確に11桁のシーケンスであるかどうかを確認できます。Match
またはメソッドを使用Matches
して、文字列内のシーケンスの1つまたはすべてを(それぞれ)検索できます。
それは
[^\d]+\d{11}[^\d]+
あなたはほとんどそこにいます。non-digit
シーケンスの前後に正確に 1 つあることを確認する必要があります。[^\d]
したがって、両端に量指定子なしでa を挿入する必要があります。
この正規表現を試すことができます: -
(?:.*?[^\d]|^)\d{11}(?:[^\d].*|$)
デモを見る: - http://www.myregextester.com/?r=14ad3bb5
上記の正規表現は、次の文字列に一致します: -
asd 12345678901 asd 11
12341234234
af23412434353 saf // 11 digits preceded by characters. I suppose you expect it to match.
そして、この文字列を拒否します: -
asd 123456789012 asd 11