为什么我的表达符合明显不符合表达式的内容?

时间:2016-10-13 14:14:30

标签: ruby-on-rails ruby regex match

我使用的是Rails 4.2.7。我想匹配模式,数字,任意数量的空格和潜在的" +"在末尾。所以我写了

2.3.0 :013 > /\d+\s*\+?/.match("40+")
 => #<MatchData "40+">

然而,这也是匹配的

2.3.0 :012 > /\d+\s*\+?/.match("40-50")
 => #<MatchData "40"> 

是什么给出的?字符串&#34; 40-50&#34;与所提供的表达方式不匹配,但显然我在正则表达式中没有做正确的事。

2 个答案:

答案 0 :(得分:0)

如果您希望它仅匹配完整字符串,请使用\A\z标记。像这样:

/\A\d+\s*\+\z$/.match("40-50")

这将强制正则表达式仅在完整字符串匹配时才匹配。

否则,你现在拥有它的方式,它会在你的字符串中的任何地方找到匹配时立即停止。

\d+表示一位数或更多。

\s*表示可选空格。

\+?表示可选的+符号

所以40符合这些条件。

答案 1 :(得分:0)

?量词是你的问题

您需要以下内容:

/\d+\s*\+/.match("40-50")

如果在没有量词的情况下使用\+?而不是\+,则问号会将语句修改为表示&#34;零个或前一个原子之一。&#34;使用量词时,40-50匹配,因为字符串中有+个字符。