2011-01-25 115 views
1

我有一个非常简单的正则表达式任务,让我感到困惑(当时我还以为我也开始了解它们)。我只想检查一个字符串是否包含11位数字。我用这个正则表达式是/\d{11}/。我的理解是,如果确实(不多也不少于)11个数字字符(但显然我的理解是错误的),这将产生匹配。为什么这个ruby正则表达式不起作用?

这里是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 

因此,虽然我得到一个11位的字符串,并适当不匹配的为10位数的字串适当的比赛,我在12得到一个匹配数字串!我会认为/\d{11,}/将是这样做的正则表达式。

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

回答

5

没有anchors,“不多,不少”的假设是不正确的。

/\d{5}/ 

匹配

foo12345bar 
^
    +---here 

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

所以,改用:

/^\d{5}$/ 
+0

太好了,谢谢。我做了推荐的阅读,并意识到一个更好的正则表达式会是/ \ A \ D \ Z \ /但这只是挑剔。 – brad 2011-01-25 10:13:34

1

12位字符串包含你的正则表达式匹配的字符串。如果你想要一个精确的匹配,像这样写出正则表达式:/^\d{11}$/

相关问题