需要一些帮助来理解ruby中的反向引用

时间:2015-01-19 00:54:18

标签: ruby regex backreference

我正在处理一个coderbyte问题,我输出一个字符的出现次数以及相应的字符。例如“wwwggopp”将返回3w2g1o2p。我能够解决它,但我将我的答案与其他人的答案进行了比较,他们想出了以下内容:

def RunLength(str)
   chunks = str.scan(/((\w)\2*)/)
   output = ' '
   chunks.each do |chunk|
      output << chunk[0].size.to_s + chunk[1]
   end
   output
end

我获得了大部分代码,但究竟发生了什么?

 (/((\w)\2*)/)

我明白\ w指的是任何字符而\ 2是'反向引用'而*是指0个或更多个实例...但是在一起,我不确定它是什么意思,主要是因为我不知道真的知道什么是反向引用以及它是如何工作的。我一直在阅读它,但我仍在努力掌握这个概念。 \ 2是否引用“第二组”,如果是,那么“第二组”究竟是什么?

1 个答案:

答案 0 :(得分:3)

Backreferences回想一下capturing group匹配的内容。反向引用被指定为反斜杠(\);然后是一个数字,表示要召回的群组号

你的正则表达式崩溃了:

(           # group and capture to \1:
  (         #   group and capture to \2:
    \w      #     word characters (a-z, A-Z, 0-9, _)
  )         #   end of \2
  \2*       #   what was matched by capture \2 (0 or more times)
)           # end of \1