【问题标题】:how I could regex ruby replace by group 10 using gsub?如何使用 gsub 将 regex ruby​​ 替换为第 10 组?
【发布时间】:2018-02-25 06:32:21
【问题描述】:

我试图 gsub 使用组 10 替换字符串,而不是这个 ruby​​ 替换为组 1 和 0 我在 gsub 替换中使用它

gsub   \\10xp
  "smnm nmnmn nmnmn dsdsf sffddf sffdfd dfsff fdsdsfd fsdds ssfsff".gsub(/(\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+)/,"\\10xp")  

用于替换并获取组1和字符串“0xp”

我该如何解决这个问题

请帮帮我

【问题讨论】:

    标签: ruby regex regex-group


    【解决方案1】:

    没有一个已知的正则表达式引擎支持[0..9] 区域之外的未命名组。请改用named_captures,或使用未捕获的组(?:...),或使用更明智的正则表达式:

    "smnm nmnmn nmnmn dsdsf sffddf sffdfd dfsff fdsdsfd fsdds ssfsff".
      gsub(/((?:\S+\s+){9})(\S+)/, "\\1 \\2xp")
    
    #                      ⇑ second group
    #                  ⇑⇑⇑ nine times
    #        ⇑⇑⇑ don’t capture this!
    #       ⇑ first group
    

    【讨论】:

      【解决方案2】:

      不确定如何引用两位数的捕获组,但您始终可以使用类似以下内容的名称来引用:

      "smnm nmnmn nmnmn dsdsf sffddf sffdfd dfsff fdsdsfd fsdds ssfsff".
        gsub(/(\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (?<ten>\S+)/,
             '\k<ten>xp')
      # "ssfsffxp"
      

      【讨论】:

      猜你喜欢
      • 2016-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-24
      • 1970-01-01
      • 2017-02-01
      • 1970-01-01
      • 2020-10-16
      相关资源
      最近更新 更多