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

需要一些帮助来理解ruby中的反向引用吗,ruby,regex,backreference,Ruby,Regex,Backreference,我正在处理一个coderbyte问题,在这个问题上,我输出一个字符的出现次数以及相应的字符。例如,“wwggopp”将返回3w2g1o2p。我能够解决这个问题,但我将我的答案与其他人的答案进行了比较,他们得出了以下结论: def RunLength(str) chunks = str.scan(/((\w)\2*)/) output = ' ' chunks.each do |chunk| output << chunk[0].size.to_s + c

我正在处理一个coderbyte问题,在这个问题上,我输出一个字符的出现次数以及相应的字符。例如,“wwggopp”将返回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指的是“反向引用”,而*指的是0个或多个实例……但总的来说,我不确定它是什么意思,主要是因为我不知道反向引用是什么以及它是如何工作的。我一直在读关于它的书,但我仍在努力理解这个概念。\2指的是“第二组”吗?如果是,那么“第二组”到底是什么

回想一下什么是匹配的。反引用被指定为反斜杠(
\
);后跟一个数字,表示要召回的组的编号

您的正则表达式出现故障:

(           # 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
回想一下什么是匹配的。反引用被指定为反斜杠(
\
);后跟一个数字,表示要召回的组的编号

您的正则表达式出现故障:

(           # 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
回想一下什么是匹配的。反引用被指定为反斜杠(
\
);后跟一个数字,表示要召回的组的编号

您的正则表达式出现故障:

(           # 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
回想一下什么是匹配的。反引用被指定为反斜杠(
\
);后跟一个数字,表示要召回的组的编号

您的正则表达式出现故障:

(           # 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

回答得好。我要补充的是,普通括号是一个捕获组;带有问号语法(
(?:…)
(?=…)
等)的括号未捕获。因此,第一个括号或\1捕获所有出现的字符,例如“wwggopp”中的['www']['gg']['o']['pp'],第二个括号或\2捕获\1组中的一个字符,例如['w']['g']['o']['p']。如果是这样的话,可以安全地假设一个普通括号将始终捕获一个字符的所有匹配项吗?不,普通括号将捕获其中的任何内容。如果您有一个字符串
“dog is running”
(dog)
捕获
“dog”
(…g)
捕获
“dog”
“ing”
(\s)
将分别捕获每个空格,
(..\2)
将捕获
“nnin”
“is”
(在两个中间字符之后重复相同的字符)。回答得好。我要补充的是,普通括号是一个捕获组;带有问号语法(
(?:…)
(?=…)
等)的括号不捕获。因此,第一个括号或\1捕获所有出现的字符,例如中的['www']['gg']['o']['pp']“wwggopp”和第二个圆括号或\2从\1组中捕获1个字符,例如[w']['g']['o']['p']。如果是这种情况,可以安全地假设普通圆括号将始终捕获所有出现的字符吗?不,普通圆括号将捕获其中的任何字符。如果您有字符串
“dog正在运行”
(dog)
捕获
“dog”
(..g)
捕获
“dog”
“ing”
(\s)
将分别捕获每个空格,
(..\2)
将捕获
“nnin”
“is”
(两个插入字符后重复相同字符)。回答得好。我要补充的是,普通括号是一个捕获组;带有问号语法(
(?:…)
(?=…)
等)的括号不是捕获组。因此,第一个括号或\1捕获字符的所有出现,例如“wwggopp”中的['www']['gg']['o']['pp']“第二个圆括号或\2从\1组中捕获1个字符,例如['w']['g']['o']['p']。如果是这样,可以安全地假设一个普通圆括号将始终捕获所有出现的字符吗?不,普通圆括号将捕获其中的任何字符。如果您有字符串
“狗正在运行”
(狗)
捕获
“dog”
(..g)
捕获
“dog”
“ing”
(\s)
将分别捕获每个空格,
(..\2)
将捕获
“nnin”
“is”
(两个插入字符后重复相同字符)。回答得好。我要补充的是,普通括号是一个捕获组;带有问号语法(
(?:…)
(?=…)
等)的括号不是捕获组。因此,第一个括号或\1捕获所有出现的字符,例如“wwggopp”中的['www']['gg']['o']['pp']第二个括号或\2从\1组中捕获1个字符,例如[w']['g']['o']['p']。如果是这种情况,是否可以安全地假设普通括号将始终捕获所有出现的字符?不,普通括号将捕获其中的任何字符。如果您有字符串
“狗正在运行”
(狗)
捕获
“dog”
(..g)
捕获
“dog”
“ing”
(\s)
将分别捕获每个空格,
(..\2)
将捕获
“nnin”
“is”
(两个插入字符后重复相同字符)。该点没有第二个捕获组,\2将永远不匹配。该点没有第二个捕获组,\2将永远不匹配。该点没有第二个捕获组,\2将永远不匹配。该点没有第二个捕获组,\2将永远不匹配。