如何使用反向引用访问字符串内的哈希映射

时间:2014-03-12 19:42:33

标签: ruby hashmap gsub

我正在使用gsub方法,并使用// 1来获取后向引用。

在那,比方说,

  

map = {" Stack" => "溢出"}

     

"#1" .gsub(/(栈)上溢/"非\\ 1&#34)

将打印"NonStack"。我正确地得到了这个。

我想在这里使用地图,例如

"Stackoverflow".gsub("/(Stack)overflow/","#{$map['\\1']}")  

以便打印overflowoverflow。但我尝试了各种组合,但我没有得到这个。

1 个答案:

答案 0 :(得分:1)

您可以使用块,然后全局变量$1 .. $9保持匹配。这实现了你想要的:

map = { 'stack' => 'overflow' }
p "stackoverflow".gsub(/(stack)(overflow)/) { map[$1] + $2 }
# => overflowoverflow

或者,您可以将变量传递给块:

map = { 'stack' => 'overflow' }
p "stackoverflow".gsub(/stack/) { |match| map[match] }
# => overflowoverflow

请参阅String#gsub以供参考。