Ruby Regex与Elsif进行1或2次数字匹配

时间:2013-08-08 04:23:03

标签: ruby-on-rails ruby regex

我正在尝试在ruby中使用以下正则表达式

<% elsif entry.name=~(/^[0-9][0-9]/) %>

检查一个或多个数字的entry.name字符串。 我似乎无法正确使用语法。

例如,我希望语句在诸如的字符串上返回true “10内容创建错误,以避免不惜一切代价”

3 个答案:

答案 0 :(得分:2)

1位或2位数匹配将是:

/^\d{1,2}/

为了确保没有第3位数字,您可以使用前瞻:

/^\d{1,2}(?!\d)/

有人提到:

/^\d+/

但那实际上会匹配3位数(例如)。

答案 1 :(得分:1)

^[0-9][0-9]匹配的是一个字符串,在每行的开头(^)正好有两个数字,从0到9([0-9][0-9])。

这会将字符串匹配为

"10 mistakes to avoid at all cost"

但是:

"Jenny was certain she had\n10 lipsticks"

因为它在每行的开头搜索数字。它不匹配

"5 mistakes to avoid at all cost"

因为它与数字完全匹配。

我认为你想要的是\A\d+\A仅在字符串的开头搜索,而不是在每一行,\d+搜索一个或多个匹配的数字。这将符合以下内容:

"3 questions you should be able to answer when doing a job interview"
"345 lines of unreadable code"
"35 kittens"

等等。因此,您的代码应该读取,减去多余的括号并加上一些间距:

<% elsif entry.name =~ /\A\d+/ %>

rubular下次可能会派上用场

答案 2 :(得分:0)

s = "10 Content Creation Mistakes To Avoid At All Costs"
s.scan(/^\d+/)
# => ["10"]
s.scan(/^\d+/).empty?
# => false
!s.scan(/^\d+/).empty?
# => true

s = "10 Content Creation Mistakes To Avoid At All Costs"
s =~ (/^\d+/)
# => 0