将字符串转换为正则表达式ruby

时间:2011-12-28 06:39:13

标签: ruby regex string ruby-1.9.3

我需要将“/ [\ w \ s] + /”之类的字符串转换为正则表达式。

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

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

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

我还尝试删除反斜杠:

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

然后我试着这么简单:

str = "[\w\s]+"
=> "[w ]+"
它逃脱了。现在,字符串如何保持不变并转换为正则表达式对象?

5 个答案:

答案 0 :(得分:132)

在这里看起来你需要将单个引号中的初始字符串(参考this page

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

答案 1 :(得分:126)

要清楚

  /#{Regexp.quote(your_string_variable)}/

也在努力

编辑在Regexp.quote中包装了your_string_variable,以确保正确无误。

答案 2 :(得分:34)

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

/#{Regexp.quote(your_string)}/

例如,.将被转义,因为它被解释为“任何字符”。

请记住使用单引号字符串,除非您希望使用常规字符串插值,其中反斜杠具有特殊含义。

答案 3 :(得分:6)

使用%表示法:

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

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

来自help

  

%r []插值正则表达式(结束后会出现标记)   定界符)

答案 4 :(得分:4)

宝石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/}