我使用的是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;与所提供的表达方式不匹配,但显然我在正则表达式中没有做正确的事。
答案 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
匹配,因为字符串中有+
个字符。