Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re^2: Regexes: finding ALL matches (including overlap)

by kaif (Friar)
on Jun 04, 2005 at 04:23 UTC ( [id://463469]=note: print w/replies, xml ) Need Help??


in reply to Re: Regexes: finding ALL matches (including overlap)
in thread Regexes: finding ALL matches (including overlap)

Great! This is exactly the code idea I wanted. Are there any other ways without using such a construct (just for the sake of TIMTOWDI)?

I was always unsure of the level of support of enclosing code within regexen. Do you know what kinds of things can go wrong?

  • Comment on Re^2: Regexes: finding ALL matches (including overlap)

Replies are listed 'Best First'.
Re^3: Regexes: finding ALL matches (including overlap)
by ikegami (Patriarch) on Jun 04, 2005 at 04:51 UTC
    Do you know what kinds of things can go wrong?

    Backtracking can screw things up:

    my $count; 'ac' =~ / a (?{ $count++ }) b | a (?{ $count++ }) c /x; # 1. Matches 'a' in first branch. # 2. Increments $count to 1. # 3. Fails to match 'b'. # 4. Matches 'a' in second branch. # 5. Increments $count to 2. # 6. Matches 'c'. print("$count\n"); # 2

    The fix is to use local. When the regexp backtracks through a local, the old value is restored. The old value is also restored when the regexp succesfully matches, so you need to save the result.

    my $count; our $c = 0; 'ac' =~ / (?: a (?{ local $c = $c + 1 }) b | a (?{ local $c = $c + 1 }) c ) (?{ $count = $c }) # Save result. /x; # 1. Matches 'a' in first branch. # 2. Increments $c to 1. # 3. Fails to match 'b'. # 4. Undoes increment ($c = 0). # 5. Matches 'a' in second branch. # 6. Increments $c to 1. # 7. Matches 'c'. # 8. $count = $c. print("$count\n"); # 1

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (6)
As of 2024-04-19 04:00 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found