Answers:
需要注意的是,Regexp.quote
在乔恩L.的回答是很重要的!
if goo =~ /#{Regexp.quote(foo)}/
如果您只是执行“显而易见的”版本:
if goo =~ /#{foo}/
那么匹配文本中的句"0.0.0.0"
点将被视为regexp通配符,并将匹配"0a0b0c0"
。
还请注意,如果您确实只想检查子字符串是否匹配,则只需
if goo.include?(foo)
不需要额外的引号或担心特殊字符。
.quote()
如果您要使用字符串构造正则表达式,则反向(不使用)也很有用。
if goo.include?(foo)
在有兴趣检查是否存在时,只需执行“ => True。如果您有兴趣替换并已经使用String.gsub,则Regexp.quote可能是您唯一的选择。
Regexp.new
or即可Regexp.compile
。
Regexp.compile(Regexp.escape(foo))
这是一个有限但有用的其他答案:
我发现如果只在输入字符串上使用单引号,就可以轻松插入正则表达式而无需使用Regexp.quote或Regexp.escape:(IP地址匹配)
IP_REGEX = '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'
my_str = "192.0.89.234 blahblah text 1.2, 1.4" # get the first ssh key
# replace the ip, for demonstration
my_str.gsub!(/#{IP_REGEX}/,"192.0.2.0")
puts my_str # "192.0.2.0 blahblah text 1.2, 1.4"
单引号仅解释\\和\'。
http://en.wikibooks.org/wiki/Ruby_Programming/Strings#Single_quotes
当我需要多次使用正则表达式的相同长部分时,这对我有所帮助。我认为,这不是通用的,但适合问题的例子。