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

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

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

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

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

此外,我还试着去掉了反斜杠:

但运气不好。

然后我试着把事情简单化:

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

现在,字符串如何保持原样并转换为 regexp 对象呢?

74459 次浏览

在这里,您需要将初始字符串放在单引号中(请参阅 这一页)

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

说清楚

  /#{Regexp.quote(your_string_variable)}/

也起作用了

编辑: 为了正确起见,在 Regexp.quote 中包装了您的 _ string _ variable。

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

/#{Regexp.quote(your_string)}/

例如,.将被转义,因为它在其他方面被解释为“任意字符”。

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

使用% 符号:

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

或者

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

来自 救命:

插入的正则表达式(标志可以在关闭后出现 分隔符)

宝石 To _ regexp可以做这项工作。

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

你也可以使用修饰语:

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

最后,您可以更懒惰地使用: check

'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/}

我刚刚遇到了这个问题,我需要在传输程序中将字符串“/[ w s ] +/”更改为正则表达式。我用的是 Eval:

irb(main):001:0> eval( '/[\w\s]+/' )
=> /[\w\s]+/