我有一个字符串,其中包含多个连续字符序列,例如:
aaabbcccdddd
我希望将其表示为:
a3b2c3d4
目前,我想到的是:#! /usr/bin/perl
$str = "aaabbcccdddd";
$str =~ s/(.)\1+/$1/g;
print $str."\n";
输出:
abcd
它将连续的字符存储在捕获缓冲区中,并仅返回一个字符。但是,我想要一种方法来计算捕获缓冲区中连续字符的数量,然后显示一个字符,后跟该计数,以便它显示输出为
a3b2c3d4
而不是abcd
。上述正则表达式需要做出什么修改?
${^MATCH}
以避免$&
的性能损失。请参见perlre。 - JRFerguson${^PREMATCH}
、${^MATCH}
和${^POSTMATCH}
仅针对当前匹配项捕获,而不是每个匹配项。 - JRFergusonperldoc perlre
,/p
保证在匹配成功的情况下${^PREMATCH}
、${^MATCH}
和${^POSTMATCH}
将被定义。这是使用它的一个很好的理由;这是你早期评论的意思吗? - Zaid