#!/usr/bin/perl use 5.016; use warnings; # 1060027 my $string = "aacbbbcac"; my $re1 = qr/((a+)?(b+)?(c))*/; my $re2 = qr/(a.*?)(b.+?)(c)(.*)/; # ADDED ON SUSPICION THAT OP'S REGEX FU # MIGHT BE INCREMENTED BY THIS EXAMPLE if ($string =~ $re1) { say "Here are the captures: $1, $2, $3)\n"; # ADDED line foreach (0..$#-) { printf "Group %d: <%s>\n", $_, substr($string, $-[$_], $+[$_] - $-[$_]); } } say "\n"; if ( $string =~ $re2 ) { say "USING \$re2, here are the captures \$1..\$4: $1, $2, $3, $4)\n"; foreach (0..$#-) { printf "Group %d: <%s>\n", $_, substr($string, $-[$_], $+[$_] - $-[$_]); } } =head #ONLY the "ADDED" lines are changed from OP's original Here are the captures: ac, a, bbb) Group 0: Group 1: Group 2: Group 3: Group 4: USING $re2, here are the captures $1..$4: aac, bbb, c, ac) Group 0: Group 1: Group 2: Group 3: Group 4: =cut