0

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

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

检查 entry.name 字符串中是否有 1 个或多个数字。我似乎无法正确使用语法。

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

4

3 回答 3

3

1 位或 2 位数字匹配将是:

/^\d{1,2}/

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

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

有人提到:

/^\d+/

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

于 2013-08-08T05:28:35.083 回答
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 下次可能会派上用场

于 2013-08-08T05:20:00.530 回答
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
于 2013-08-08T04:25:30.333 回答