在Ruby gsub块(regex)中使用命名捕获组

在Ruby gsub块(regex)中使用命名捕获组,ruby,regex,gsub,Ruby,Regex,Gsub,我试图在Ruby中的块中使用命名的捕获组$1仍然有效,但我想使用我提供的名称引用它 "foo /(bar)".gsub(/(?<my_word> \(.*?\) )/x) do |match| puts "$1 = #{$1} and $my_word = #{$my_word}" end “foo/(bar)”.gsub(/(?\(.*?\)/x)不匹配| 放置“$1={$1}和$my_word={$my_word}” 结束 应为:$1=(bar)和$my_word=(ba

我试图在Ruby中的块中使用命名的捕获组<代码>$1仍然有效,但我想使用我提供的名称引用它

"foo /(bar)".gsub(/(?<my_word> \(.*?\) )/x) do |match|
  puts "$1 = #{$1} and $my_word = #{$my_word}"
end
“foo/(bar)”.gsub(/(?\(.*?\)/x)不匹配|
放置“$1={$1}和$my_word={$my_word}”
结束
应为:
$1=(bar)和$my_word=(bar)

您正在寻找的

"foo /(bar)".gsub(/(?<my_word> \(.*?\) )/x) do |match|
  puts "$1 = #{$1} and $my_word = #{$~[:my_word]}"
end
“foo/(bar)”.gsub(/(?\(.*?\)/x)不匹配|
放置“$1={$1}和$my_word={$~[:my_word]}”
结束

非常好,谢谢。我以前从未见过这样的语法。你能给我一个好的正则表达式教程链接吗?我知道
zero
关于
regex
:(你需要
\(.*?)
中的
有什么原因吗?在我的理解中,这是说“任何字符的零次或多次,零次或多次”,这似乎与“任何字符的零次或多次”相同,即
\(.*)
@acobster我写这篇文章已经有一段时间了,但我相信这是为了防止它捕获第一对后面括号中的内容。例如,
(foo)(bar)中的“bar”
。如果它是贪婪的,它将从最左边开始,捕获所有内容,直到最后一个括号。
$~
相当于
Regexp.last\u match