Convert a string to regular expression ruby

﹥>﹥吖頭↗ 提交于 2019-11-29 20:54:31

Looks like here you need the initial string to be in single quotes (refer this page)

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

To be clear

  /#{Regexp.quote(your_string_variable)}/

is working too

edit: wrapped your_string_variable in Regexp.quote, for correctness.

This method will safely escape all characters with special meaning:

/#{Regexp.quote(your_string)}/

For example, . will be escaped, since it's otherwise interpreted as 'any character'.

Remember to use a single-quoted string unless you want regular string interpolation to kick in, where backslash has a special meaning.

Using % notation:

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

or

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

From help:

%r[ ] Interpolated Regexp (flags can appear after the closing delimiter)

The gem to_regexp can do the work.

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

You also can use the modifier:

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

Finally, you can be more lazy using :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/}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!