在Ruby中将String转换为Regexp

时间:2016-04-20 23:10:38

标签: ruby regex string

我经常需要将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。

1 个答案:

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