2011-01-25 7 views
1

私は非常にシンプルな正規表現のタスクを持っていて、混乱してしまいました。文字列が11桁であることを確認したいだけです。私がこれに使用した正規表現は/\d{11}/です。私が理解しているのは、正確に(それ以上でもなくても)11個の数字がある場合(これは明らかに私の理解が間違っている)、これは一致を与えるということです。ここでなぜこのルビー正規表現は機能しませんか?

はIRBで何が起こるかです:私は、11桁の文字列と10桁の文字列のための適切な不一致のための適切なマッチを取得しながら、

ruby-1.9.2-p136 :018 > "33333333333" =~ /\d{11}/ 
=> 0 
ruby-1.9.2-p136 :019 > "3333333333" =~ /\d{11}/ 
=> nil 
ruby-1.9.2-p136 :020 > "333333333333" =~ /\d{11}/ 
=> 0 

だから、私は12の試合を取得しています数字の文字列!私は/\d{11,}/がこれを行うための正規表現だと思っていただろう。

誰かが私の誤解を説明できますか?

答えて

5

anchorsが指定されていない場合、「それ以上はない」という前提が正しくありません。

/\d{5}/ 

試合

foo12345bar 
^
    +---here 

s123456yargh13337 
^^  ^
|+---here | 
+----here | 
     here--+ 

ので、代わりに使用します。

/^\d{5}$/ 
+0

本当にありがとうございます。私は推奨された読書をして、さらに良い正規表現は/ \ A \ d {11} \ Z /であることに気がついたが、それはちょっとしたことだ。 – brad

+0

@brad True。 '\ b \ d {11} \ b'はまだ別の方法です。 –

1

を12桁の文字列は、あなたの正規表現に一致する部分文字列が含まれています。完全一致が必要な場合は、/^\d{11}$/のように正規表現を書いてください。

関連する問題