插入一个正则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}/