将string转换为正则expression式ruby
我需要像“/ [\ w \ s] + /”string转换为正则expression式。
"/[\w\s]+/" => /[\w\s]+/
我尝试使用不同的Regexp
方法,如:
Regexp.new("/[\w\s]+/") => /\/[w ]+\//
,类似于Regexp.compile
和Regexp.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/}