【问题标题】:Using named capture groups inside Ruby gsub blocks (regex)在 Ruby gsub 块中使用命名的捕获组(正则表达式)
【发布时间】: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 regex gsub


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    • 2019-03-17
    • 2011-03-03
    • 1970-01-01
    • 2011-10-21
    相关资源
    最近更新 更多