我正在处理一个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是否引用“第二组”,如果是,那么“第二组”究竟是什么?
答案 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