我经常需要将String转换为Regexp。对于许多字符串,Regexp.new(string)
就足够了。但如果string
包含特殊字符,则需要对其进行转义:
string = "foo(bar)"
regex = Regexp.new(string) # => /foo(bar)/
!!regex.match(string) # => false
Regexp类有一种很好的方法可以转义所有特殊于regex的字符: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))
之外,还有更好的方法将String转换为Regexp吗?毕竟,这个 Ruby。
答案 0 :(得分:2)
你永远不需要运行Regexp.new(Regexp.escape(string))
这是因为,在Core和StdLib中,实际上每个采用Regexp的方法都需要一个字符串(应该这样)。
在原始情况下,如果您尝试将古怪的字符串上的大字符串big_string
与"foo(bar)"
等特殊字符匹配,则可以运行big_string.match("foo(bar)")
。
如果您尝试做更好的事情,可能需要同时使用::escape
和::new
,但永远不会直接撰写。例如,如果我们想要在一个古怪的字符串后跟一个单独的数字匹配big_string
,我们将运行Regexp.new(Regexp.escape(string) + "\\d")
。