在 Ruby gsub 块中使用命名的捕获组(正则表达式)
Posted
技术标签:
【中文标题】在 Ruby gsub 块中使用命名的捕获组(正则表达式)【英文标题】:Using named capture groups inside Ruby gsub blocks (regex) 【发布时间】: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)
【问题讨论】:
【参考方案1】:你正在寻找
"foo /(bar)".gsub(/(?<my_word> \(.*?\) )/x) do |match|
puts "$1 = #$1 and $my_word = #$~[:my_word]"
end
【讨论】:
太好了,谢谢。我以前从未见过这样的语法。 你能给我一个好的正则表达式教程链接吗?我知道zero
关于regex
。 :(
您是否有理由需要\(.*?\)
中的?
?在我的理解中,这就是说“任何字符的零个或多个,零个或多个”,这似乎与“任何字符的零个或多个”相同,即\(.*\)
@acobster 我写这篇文章已经有一段时间了,但我相信这是为了防止它在第一对之后捕获括号中的内容。即(foo)(bar)
中的“栏”。如果它是贪婪的,它会从最左边开始并捕获所有内容,直到最后一个括号。
$~
等价于Regexp.last_match
以上是关于在 Ruby gsub 块中使用命名的捕获组(正则表达式)的主要内容,如果未能解决你的问题,请参考以下文章