我正在尝试在ruby中使用以下正则表达式
<% elsif entry.name=~(/^[0-9][0-9]/) %>
检查一个或多个数字的entry.name字符串。 我似乎无法正确使用语法。
例如,我希望语句在诸如的字符串上返回true “10内容创建错误,以避免不惜一切代价”
答案 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