Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight

Re: Simple regex question

by gmax (Abbot)
on Oct 23, 2003 at 13:15 UTC ( #301573=note: print w/replies, xml ) Need Help??

in reply to Simple regex question

"\1" means the first opened parenthesis. You need to use "\2".

$ perl -e '$_="aaabbccccddeee"; print $1,$/ while /((.)\2*)/g' # ^^ # || # |+--- \2 # | # \1 aaa bb cccc dd eee

Or, if you want an array as a result,

push @array, $1 while /((.)\2*)/g;

Notice that you can't just assign the outcome of the regex to an array, because you'd get redundant results (both $1 and $2 for each match).

# THIS IS WRONG @array = $_ =~ /((.)\2*)/g; print join ", " , map {"<$_>"} @array; __END__ <aaa>, <a>, <bb>, <b>, <cccc>, <c>, <dd>, <d>, <eee>, <e>
 _  _ _  _  
(_|| | |(_|><

Replies are listed 'Best First'.
Re: Re: Simple regex question
by QM (Parson) on Oct 23, 2003 at 15:22 UTC
    push @array, $1 while /((.)\2*)/g;

    nicely demonstrates the difference between capturing for backreference and capturing for return value. I wonder if Perl 7 will make that distinction?

    Quantum Mechanics: The dreams stuff is made of

Re: Re: Simple regex question
by Anonymous Monk on Oct 23, 2003 at 13:30 UTC
    Thanks for the double quick reply

    I can see it was a mistake trying to use split, which is why I was pratting about with the (?:) grouping in the first place.

    I'm getting older and wiser all the time (well, older anyway)...

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://301573]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (3)
As of 2022-12-10 04:24 GMT
Find Nodes?
    Voting Booth?

    No recent polls found