我使用Ruby on Rails 5.1。在Ruby中,如果第一个字符与某个字符匹配但是后面的序列与模式不匹配,我怎么说taht我想匹配一个字符串?也就是说,我希望匹配一个数字,前提是序列taht跟随的不是数组中的字符,后面跟着另外两个数字。这是我的角色阵列......
2.4.0:010> TOKENS => [":","。","'"]
所以这个字符串不匹配
3:00
自" 00"匹配我的数组中的字符模式,后跟两个数字。但是这个字符串
3400
会匹配。该字符串也匹配
3:0
这将匹配
3
因为上面没有任何内容。如何在Ruby中编写适当的正则表达式?
答案 0 :(得分:1)
string =~ /\A\d+(?!:\d{2})/
这个正则表达式意味着:
\A
将匹配固定在字符串的 start 上。\d+
表示"一个或多个数字"。(?!...)
是否定前瞻。它检查括号中包含的模式是否不匹配。,从当前位置向前看。:\d{2}
表示:
后跟两位数字。答案 1 :(得分:0)
应该考虑分别测试第一个字符和剩余字符。
def match_it?(str, first_char_regex, no_match_regex)
str[0].match?(first_char_regex) && !str[1..-1].match?(no_match_regex)
end
match_it?("0:00", /0/, /\A[:. ]cat\z/) #=> true
match_it?("0:00", /\d/, /\A[:. ]\d+\z/) #=> false
match_it?("0:00", /[[:alpha:]]/, /\A[:. ]\d+\z/) #=> false
我相信这读得很好,与使用单个正则表达式的方法相比,它简化了测试。