将string转换为正则expression式ruby

我需要像“/ [\ w \ s] + /”string转换为正则expression式。

"/[\w\s]+/" => /[\w\s]+/ 

我尝试使用不同的Regexp方法,如:

Regexp.new("/[\w\s]+/") => /\/[w ]+\// ,类似于Regexp.compileRegexp.escape 。 但是他们没有一个像我期望的那样回报。

进一步,我尝试删除反斜杠:

Regexp.new("[\w\s]+") => /[w ]+/但没有运气。

然后,我试图做到这一点:

 str = "[\w\s]+" => "[w ]+" 

它逃脱了。 现在,string如何保持原样并转换为正则expression式对象?

看起来像这里你需要初始string在单引号(请参阅此页 )

 >> str = '[\w\s]+' => "[\\w\\s]+" >> Regexp.new str => /[\w\s]+/ 

要清楚

  /#{Regexp.quote(your_string_variable)}/ 

也在工作

编辑:包裹your_string_variable Regexp.quote,为了正确。

这个方法将安全地转义所有具有特殊含义的字符:

 /#{Regexp.quote(your_string)}/ 

例如. 将会逃脱,因为它被解释为“任何angular色”。

请记住使用单引号的string,除非您想要经常插入string,反斜杠有特殊意义。

使用%符号:

 %r{\w+}m => /\w+/m 

要么

 regex_string = '\W+' %r[#{regex_string}] 

从帮助 :

%r []插值正则expression式(标志可以在closures分隔符之后出现)

gem to_regexp可以完成这项工作。

 "/[\w\s]+/".to_regexp => /[\w\s]+/ 

你也可以使用修饰符:

 '/foo/i'.to_regexp => /foo/i 

最后,你可以更懒惰地使用:detect

 'foo'.to_regexp(detect: true) #=> /foo/ 'foo\b'.to_regexp(detect: true) #=> %r{foo\\b} '/foo\b/'.to_regexp(detect: true) #=> %r{foo\b} 'foo\b/'.to_regexp(detect: true) #=> %r{foo\\b/}