插入一个正则expression式的string

我需要在Ruby中用正则expression式replacestring的值。 是否有捷径可寻? 例如:

foo = "0.0.0.0" goo = "here is some other stuff 0.0.0.0" if goo =~ /value of foo here dynamically/ puts "success!" end 

与string插入相同。

 if goo =~ /#{Regexp.quote(foo)}/ #... 

请注意, Jon L.的答案中的Regexp.quote非常重要!

 if goo =~ /#{Regexp.quote(foo)}/ 

如果你只是做“明显”的版本:

 if goo =~ /#{foo}/ 

那么匹配文本中的句点被视为正则expression式通配符, "0.0.0.0"将匹配"0a0b0c0"

还要注意,如果你真的只想检查一个子string匹配,你可以简单地做

 if goo.include?(foo) 

这不需要额外的引用或担心特殊字符。

 Regexp.compile(Regexp.escape(foo)) 

可能Regexp.escape(foo)会是一个起点,但有没有一个很好的理由,你不能使用更传统的expression式插值: "my stuff #{mysubstitutionvariable}"

另外,你可以使用!goo.match(foo).nil? 用string。

使用Regexp.new:

 if goo =~ Regexp.new(foo) # Evaluates to /0.0.0.0/ 

这是一个有限但有用的其他答案:

我发现我可以很容易地插入到正则expression式,而不使用Regexp.quote或Regexp.escape,如果我只在我的inputstring使用单引号:( 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

当我需要多次使用正则expression式的相同部分时,这帮助了我。 不是普遍的,但我相信这个问题的例子。

 foo = "0.0.0.0" goo = "here is some other stuff 0.0.0.0" puts "success!" if goo =~ /#{foo}/