The capturing parentheses in a regex expresson like qr/(?:(simple).*?)+/ always capture to the same capture group no matter how many times they may be 'repeated' by a quantifier. Which capture group (by number) is determined by the position of the capturing parentheses in the final regex. After interpolation, the statement
$string =~ /$re$re$re/g;
looks like
$string =~ /(?:(simple).*?)+(?:(simple).*?)+(?:(simple).*?)+/g;
which clearly contains three sets of capturing parentheses, capturing to $1 $2 $3 respectively.
Perhaps a way to do what you want is:
c:\@Work\Perl\monks>perl -wMstrict -MData::Dump -le "my $re = qr/(?:(simple).*?)+/; ;; my $string = 'This is a simple string, just a simple simple thing.'; my @captures = $string =~ /$re/g; dd \@captures; " ["simple", "simple", "simple"]
Update: This particular example can be expressed even more simply as:
c:\@Work\Perl\monks>perl -wMstrict -MData::Dump -le "my $re = qr/simple/; ;; my $string = 'This is a simple string, just a simple simple thing.'; my @captures = $string =~ /$re/g; dd \@captures; " ["simple", "simple", "simple"]
In reply to Re: Matching a regular expression group multiple times
by AnomalousMonk
in thread Matching a regular expression group multiple times
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |