在ruby中,我看到很多代码都在执行以下操作:
def test(s)
s =~ /Macintosh/
end
测试字符串是否与正则表达式匹配。但是,这会返回fixnum或nil,具体取决于它是否找到匹配项。有没有办法做同样的操作,但让它返回一个布尔值,看它是否匹配?
我想到的两个可能的解决方案是!(s =~ /Macintosh/).nil?
和!(s !~ /Macintosh/)
,但这些解决方案看起来都不太可读。是否有类似的东西:
def test(s)
s.matches?(/Macintosh/)
end
答案 0 :(得分:10)
您可以使用:
def test(s)
/Macintosh/ === s
end
答案 1 :(得分:1)
三元语法可能有助于或适合不同的样式首选项:
x = '10.0.0'
x =~ /\d*\.\d*\.\d*/ ? true : false # => true
# Unlike c-style languages, 0 is true in ruby:
x =~ /\d*\.\d*\.\d*/ # => 0
0 ? true : false # => true
案例比较运算符===
的顺序很重要[1],例如:
/\d*\.\d*\.\d*/ === x
#=> true
x === /\d*\.\d*\.\d*/
#=> false
[1] https://ruby-doc.org/core-2.2.0/Regexp.html#method-i-3D-3D-3D