需要一些帮助来理解ruby中的反向引用吗
我正在处理一个coderbyte问题,在这个问题上,我输出一个字符的出现次数以及相应的字符。例如,“wwggopp”将返回3w2g1o2p。我能够解决这个问题,但我将我的答案与其他人的答案进行了比较,他们得出了以下结论:需要一些帮助来理解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
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将永远不匹配。