【问题标题】:Why does gsub's '\1' capture group produce this string?为什么 gsub 的 '\1' 捕获组会产生这个字符串?
【发布时间】:2015-08-11 22:44:42
【问题描述】:

我很困惑为什么要通过 '\1' 分组来捕获这种模式。我一次捕获两个数字,但为什么它在这里跳过:

"123 456 789".gsub(/(\d)(\d)/, '\1')
=> "13 46 79"

我可以理解 '\0' 给了我原始字符串:

"123 456 789".gsub(/(\d)(\d)/, '\0')
=> "123 456 789"

这也让我感到困惑,但是一旦我了解了“\1”在做什么,我就能理解“\2”:

"123 456 789".gsub(/(\d)(\d)/, '\2')
=> "23 56 89"

【问题讨论】:

  • 使用 \1 时您的预期输出是什么?
  • @DylanMarkow "12 45 78"

标签: ruby regex gsub


【解决方案1】:

正则表达式匹配"12""45""78"gsub,分别用"1""4""7"替换它们,得到"13 46 79"

【讨论】:

    【解决方案2】:

    要获取12 45 78,需要使用

    (\d)\d\b
    

    并替换为\1

    demo

    在这里,我们匹配一个数字并捕获它 ((\d)),然后我们匹配另一个数字 (\d),它正好位于单词边界 \b 之前。

    IDEONE demo:

    puts "123 456 789".gsub(/(\d)\d\b/, '\1')
    

    【讨论】:

      猜你喜欢
      • 2020-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-25
      • 1970-01-01
      • 1970-01-01
      • 2016-12-30
      相关资源
      最近更新 更多