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

Ruby 如何使用反向引用访问字符串内的哈希映射,ruby,hashmap,gsub,Ruby,Hashmap,Gsub,我使用gsub方法,并使用//1获取一个back引用 就是说, 映射={“堆栈”=>“溢出”} “Stackoverflow”.gsub(/(堆栈)溢出/,“非\\1”) 将打印“非堆栈”。我理解正确 但是我想在这里使用map,比如 "Stackoverflow".gsub("/(Stack)overflow/","#{$map['\\1']}") 以便打印溢出溢出。但是我尝试了各种组合,但没有得到这个结果。可以使用一个块,然后使用全局变量$19美元保留匹配项。这可以实现您想要的: map

我使用gsub方法,并使用//1获取一个back引用

就是说,

映射={“堆栈”=>“溢出”}

“Stackoverflow”.gsub(/(堆栈)溢出/,“非\\1”)

将打印“非堆栈”。我理解正确

但是我想在这里使用map,比如

"Stackoverflow".gsub("/(Stack)overflow/","#{$map['\\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

请参阅以获取参考。

堆栈溢出.gsub(/(堆栈)溢出/){put map[$1]}
这将打印一个“string@EAGER_STUDENT它在这里打印“溢出”。你确定你的
map={'Stack'=>'overflow'}
?。只需复制粘贴我的代码并运行它:)注意我的
map
有小写的“stack”。这是我的错误
S
,map中的
S
区分大小写是个问题。您使用的是
/1
还是
\\1
?哪个?@sawa我使用的是
\\1
@earge\u学生同样,您的示例实际上使用了字符串而不是Regexp,因此它将匹配文字“(堆栈)”,而不是捕获“堆栈”:)@DaniëlKnippers谢谢我更正了!明天我会尽力向你解释为什么你的代码不起作用。。