use strict; use warnings FATAL => 'all'; my $string = "aacbbbcac"; my $re1 = qr/((a+)?(b+)?(c))*/; if ($string =~ $re1) { foreach (0..$#-) { printf "Group %d: <%s>\n", $_, substr($string, $-[$_], $+[$_] - $-[$_]); } } #### Group 0: Group 1: Group 2: Group 3: Group 4: