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