为什么这个红宝石正则表达式不起作用?

bra*_*rad 1 ruby regex

我有一个非常简单的正则表达式任务,让我感到困惑(当我以为我开始得到它们的悬念时).我只想检查字符串是否包含11位数字.我用过的正则表达式是/\d{11}/.我的理解是,如果有完全(不多于也不少于)11个数字字符,这将给出匹配(但显然我的理解是错误的).

以下是irb中发生的情况:

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 
Run Code Online (Sandbox Code Playgroud)

因此,当我得到一个11位数字符串的适当匹配和10位数字符串的适当不匹配时,我得到12位数字符串的匹配!我原本以为/\d{11,}/这将是正则表达式.

任何人都可以解释我的误解吗?

Lin*_*een 5

没有锚点,"不多也不少"的假设是不正确的.

/\d{5}/ 
Run Code Online (Sandbox Code Playgroud)

火柴

foo12345bar
   ^
   +---here
Run Code Online (Sandbox Code Playgroud)

s123456yargh13337
 ^^         ^
 |+---here  |
 +----here  |
      here--+
Run Code Online (Sandbox Code Playgroud)

所以,改为使用:

/^\d{5}$/
Run Code Online (Sandbox Code Playgroud)