我正在尝试在 ruby 中使用以下正则表达式
<% elsif entry.name=~(/^[0-9][0-9]/) %>
检查 entry.name 字符串中是否有 1 个或多个数字。我似乎无法正确使用语法。
例如,我希望语句在字符串上返回 true,例如“不惜一切代价避免的 10 个内容创建错误”
我正在尝试在 ruby 中使用以下正则表达式
<% elsif entry.name=~(/^[0-9][0-9]/) %>
检查 entry.name 字符串中是否有 1 个或多个数字。我似乎无法正确使用语法。
例如,我希望语句在字符串上返回 true,例如“不惜一切代价避免的 10 个内容创建错误”
1 位或 2 位数字匹配将是:
/^\d{1,2}/
为确保没有第三位数字,您可以使用前瞻:
/^\d{1,2}(?!\d)/
有人提到:
/^\d+/
但这实际上会匹配 3 位数字(例如)。
您要匹配的^[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 下次可能会派上用场
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