我经常需要将字符串转换为正则表达式。对于很多字符串,Regexp.new(string)
就足够了。但是,如果string
包含特殊字符,它们需要进行转义:将字符串转换为Ruby中的正则表达式
string = "foo(bar)"
regex = Regexp.new(string) # => /foo(bar)/
!!regex.match(string) # => false
RegExp类有一个很好的方式来逃避那些特别的正则表达式中的所有字符:Regexp.escape
。它使用像这样:
string = "foo(bar)"
escaped_string = Regexp.escape(string) # => "foo\\(bar\\)"
regex = Regexp.new(escaped_string) # => /foo\(bar\)/
!!regex.match(string) # => true
这确实看起来这应该是默认的方式Regexp.new
作品。除了Regexp.new(Regexp.escape(string))
之外,还有更好的方法将字符串转换为正则表达式吗?毕竟,这个是红宝石。
'Regexp.new'不应该这样工作,因为不能使用“特殊的”正则表达式然后。另外,我认为'包括'也会做同样的工作。检查[*如何检查一个字符串是否包含Ruby中的子字符串?](http://stackoverflow.com/questions/8258517/how-to-check-whether-a-string-contains-a-substring-in- ruby) –
'String :: include?'是匹配'String'与另一个'String'的最佳方式,但我不认为它可以输出'Regexp'。不过,我购买了关于'Regexp.new'的观点。 –
问题是,你根本不需要一个'Regexp'来检查字符串是否存在于另一个'String'里面。这是多余的复杂/开销。 –