in reply to Re: qr for recursive regex?
in thread qr for recursive regex?

The example I posted is simplified - perhaps too much.

I really want repetition, not recursion, but ran into roadblock with perl behaviour of only returning the last matches. Here is what I first tried, it only returns the last coordinate pair, which is documented behaviour.

#!/usr/bin/env perl use v5.16; use strict; my $prBoundaryString = <<endPrBoundary; '( (0.01 0.02) (0.0 1328.23) (0.03 0.04) ) endPrBoundary say "prBoundaryString=$prBoundaryString"; my ($coord,$coords); $coord = qr{ \(\s* (?<x>[\-\.0-9]+)\s+ (?<y>[\-\.0-9]+)\s* \)\s* }x; $coords = qr{ ( ( $coord )+ ) }x; $prBoundaryString =~ m{ \'\(\s*\s* $coords \)\s*$ }x || die "parsePrBoundary: Error parsing prBoundary"; say "-x0=$-{x}[0]"; say "-y0=$-{y}[0]"; say "-x1=$-{x}[1]"; say "-y1=$-{y}[1]"; say "-x2=$-{x}[2]"; say "-y2=$-{y}[2]";
output: - it only gets the last coordinate.
prBoundaryString='( (0.01 0.02) (0.0 1328.23) (0.03 0.04) ) -x0=0.03 -y0=0.04 -x1= -y1= -x2= -y2=

Replies are listed 'Best First'.
Re^3: qr for recursive regex?
by Limbic~Region (Chancellor) on May 28, 2014 at 19:20 UTC
    darisler,
    If you use a regex with the global modifier in scalar context, you will get an iterator allowing you to go through each set of matches one at a time (like one of the examples above):
    while ($str =~ m{$your_regex}g) { my ($x, $y) = ($1, $2); # This loop will repeat for as many matches as are in $str }

    Cheers - L~R