Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

Re^2: regular expression

by pileofrogs (Priest)
on Aug 03, 2012 at 16:51 UTC ( [id://985286]=note: print w/replies, xml ) Need Help??


in reply to Re: regular expression
in thread regular expression

Woah!

That works. I expected it would fail because the first group would match everything and then there would be nothing for the 2nd group to match against.

Here's the code I used to test:

#! /usr/bin/perl -w -T use strict; my $str = 'foo_bar_foo_bar_12345'; print "$str\n"; $str =~ /(.*)(\1.*)/ || die "Failed!\n"; print "$2\n";

Can anyone explaine why that is?

Replies are listed 'Best First'.
Re^3: regular expression
by Athanasius (Archbishop) on Aug 03, 2012 at 17:21 UTC

    From Backtracking:

    For a regular expression to match, the entire regular expression must match, not just part of it. So if the beginning of a pattern containing a quantifier succeeds in a way that causes later parts in the pattern to fail, the matching engine backs up and recalculates the beginning part—that's why it's called backtracking.

    The regex engine begins as you say, by matching everything to the first .*, but when the whole match fails it then backtracks one character and tries again. Eventually, it has backtracked to the point at which $1 contains foo_bar and $2 contains foo_bar_12345. The regex engine then verifies that this value of $2 does finally satisfy the condition \1.*, so the entire match succeeds and the regex engine stops looking and returns.

    HTH,

    Athanasius <°(((><contra mundum

      Big ++!

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others pondering the Monastery: (3)
As of 2024-03-28 17:37 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found