in reply to Matching a regular expression group multiple times
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"]
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Matching a regular expression group multiple times
by kennethk (Abbot) on Aug 12, 2014 at 17:37 UTC | |
by AppleFritter (Vicar) on Aug 12, 2014 at 18:09 UTC | |
by AnomalousMonk (Archbishop) on Aug 12, 2014 at 18:20 UTC |