【发布时间】:2013-05-10 20:40:45
【问题描述】:
我正在尝试在 Ruby 的块内使用命名的捕获组。 $1 仍然有效,但我想使用我提供的名称来引用它。
"foo /(bar)".gsub(/(?<my_word> \(.*?\) )/x) do |match|
puts "$1 = #{$1} and $my_word = #{$my_word}"
end
预期:$1 = (bar) and $my_word = (bar)
【问题讨论】:
我正在尝试在 Ruby 的块内使用命名的捕获组。 $1 仍然有效,但我想使用我提供的名称来引用它。
"foo /(bar)".gsub(/(?<my_word> \(.*?\) )/x) do |match|
puts "$1 = #{$1} and $my_word = #{$my_word}"
end
预期:$1 = (bar) and $my_word = (bar)
【问题讨论】:
你正在寻找
"foo /(bar)".gsub(/(?<my_word> \(.*?\) )/x) do |match|
puts "$1 = #{$1} and $my_word = #{$~[:my_word]}"
end
【讨论】:
zero 关于regex。 :(
\(.*?\) 中的??在我的理解中,这就是说“任何字符的零个或多个,零个或多个”,这似乎与“任何字符的零个或多个”相同,即\(.*\)
(foo)(bar) 中的“栏”。如果它是贪婪的,它会从最左边开始并捕获所有内容,直到最后一个括号。
$~ 等价于Regexp.last_match