布尔检查字符串是否与ruby中的正则表达式匹配?

时间:2014-01-28 21:30:59

标签: ruby regex

在ruby中,我看到很多代码都在执行以下操作:

def test(s)
  s =~ /Macintosh/
end

测试字符串是否与正则表达式匹配。但是,这会返回fixnum或nil,具体取决于它是否找到匹配项。有没有办法做同样的操作,但让它返回一个布尔值,看它是否匹配?

我想到的两个可能的解决方案是!(s =~ /Macintosh/).nil?!(s !~ /Macintosh/),但这些解决方案看起来都不太可读。是否有类似的东西:

def test(s)
  s.matches?(/Macintosh/)
end

2 个答案:

答案 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