我有一个非常简单的正则表达式任务让我感到困惑(当我以为我开始得到它们的悬念时)。我只想检查字符串是否包含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
因此,当我得到一个11位数字符串的适当匹配和10位数字符串的适当不匹配时,我得到一个12位数字符串的匹配!我原以为/\d{11,}/
会是正则表达式。
任何人都可以解释我的误解吗?
答案 0 :(得分:5)
没有anchors,假设“不多也不少”是不正确的。
/\d{5}/
匹配
foo12345bar
^
+---here
和
s123456yargh13337
^^ ^
|+---here |
+----here |
here--+
所以,改为使用:
/^\d{5}$/
答案 1 :(得分:1)
12位数字符串包含与正则表达式匹配的子字符串。如果您想要完全匹配,请按以下方式编写正则表达式:/^\d{11}$/
。