0

RegExで11個の隣接する(つまり、間に他の文字がない11桁)桁を検出するにはどうすればよいですか?

つまり、一致する必要がasd 12345678901 asd 11あり、AA12345678901as

ただし、12 の隣接する数字があるためではありません asd 123456789012 asd 11

やってみ(^[0-9])*(\d{11})(^[0-9])*たけど合ってるasd 123456789012 asd 11

4

4 に答える 4

4

を試してください\b\d{11}\b。これは、11 桁の周囲に単語境界を指定するため、12 桁のうち最初の 11 桁と一致しません。

于 2013-01-29T14:54:49.383 に答える
1

これは、ルックアラウンドで行うことができます。

(?<!\d)\d{11}(?!\d)

正確に11桁のシーケンスに一致し、前後に他の数字がないことを確認できます(ただし、アルファベット、スペースなど、他の文字でもかまいません)。

したがって、これらの文字列には一致が含まれていると見なされjhgjad12345678901ます:、、、、、1234567890112345678901skjdhkssdfjhsdf 12345678901 sdfjgj 2342 sdkfl=-=342_12345678901:}{]'

または別の方法で、見回す必要はありません。

(?:\D|^)(\d{11})(?:\D|$)

11桁の番号はキャプチャグループ1に含まれます。

上記の正規表現でメソッドを使用IsMatchして、文字列が正確に11桁のシーケンスであるかどうかを確認できます。Matchまたはメソッドを使用Matchesして、文字列内のシーケンスの1つまたはすべてを(それぞれ)検索できます。

于 2013-01-29T15:04:54.460 に答える
0

それは

[^\d]+\d{11}[^\d]+
  1. 少なくとも 1 つの非数字
  2. ちょうど11桁
  3. 少なくとも 1 つの非数字
于 2013-01-29T14:55:39.020 に答える
0

あなたはほとんどそこにいます。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
于 2013-01-29T14:58:38.400 に答える