cmt*_*kur 111 ruby regex string ruby-1.9.3
我需要将"/ [\ w\s] + /"之类的字符串转换为正则表达式.
"/[\w\s]+/" => /[\w\s]+/
Run Code Online (Sandbox Code Playgroud)
我尝试使用不同的Regexp
方法,如:
Regexp.new("/[\w\s]+/") => /\/[w ]+\//
,同样Regexp.compile
和Regexp.escape
.但是没有一个像我预期的那样回归.
我还尝试删除反斜杠:
Regexp.new("[\w\s]+") => /[w ]+/
但没有运气.
然后我试着这么简单:
str = "[\w\s]+"
=> "[w ]+"
Run Code Online (Sandbox Code Playgroud)
它逃脱了.现在,字符串如何保持不变并转换为正则表达式对象?
alo*_*ony 141
在这里看起来你需要将单个引号中的初始字符串(参见本页)
>> str = '[\w\s]+'
=> "[\\w\\s]+"
>> Regexp.new str
=> /[\w\s]+/
Run Code Online (Sandbox Code Playgroud)
Ser*_*mov 132
要清楚
/#{Regexp.quote(your_string_variable)}/
Run Code Online (Sandbox Code Playgroud)
也在努力
编辑:在Regexp.quote中包装your_string_variable,以确保正确性.
san*_*rom 35
此方法将安全地转义具有特殊含义的所有字符:
/#{Regexp.quote(your_string)}/
Run Code Online (Sandbox Code Playgroud)
例如,.
将被转义,因为它被解释为"任何字符".
请记住使用单引号字符串,除非您希望使用常规字符串插值,其中反斜杠具有特殊含义.
使用%表示法:
%r{\w+}m => /\w+/m
Run Code Online (Sandbox Code Playgroud)
要么
regex_string = '\W+'
%r[#{regex_string}]
Run Code Online (Sandbox Code Playgroud)
来自帮助:
%r [] Interpolated Regexp(标志可以在结束分隔符后出现)
宝石to_regexp可以完成这项工作。
"/[\w\s]+/".to_regexp => /[\w\s]+/
Run Code Online (Sandbox Code Playgroud)
您还可以使用修饰符:
'/foo/i'.to_regexp => /foo/i
Run Code Online (Sandbox Code Playgroud)
最后,您可以使用: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/}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
58452 次 |
最近记录: |