use strict;
use warnings;
use YAPE::Regex::Explain;
my $REx1 = qr/^(11+)(\1)+$/;
my $REx2 = qr/^(11+){2,}$/;
my $exp1 = YAPE::Regex::Explain->new($REx1)->explain;
my $exp2 = YAPE::Regex::Explain->new($REx2)->explain;
print 'm/^(11+)(\1)+$/', "\n", $exp1, "\n";
print 'm/^(11+){2,}$/', "\n", $exp2, "\n";
And the output:
m/^(11+)(\1)+$/
The regular expression:
(?-imsx:^(11+)(\1)+$)
matches as follows:
NODE EXPLANATION
----------------------------------------------------------------------
(?-imsx: group, but do not capture (case-sensitive)
(with ^ and $ matching normally) (with . not
matching \n) (matching whitespace and #
normally):
----------------------------------------------------------------------
^ the beginning of the string
----------------------------------------------------------------------
( group and capture to \1:
----------------------------------------------------------------------
1 '1'
----------------------------------------------------------------------
1+ '1' (1 or more times (matching the most
amount possible))
----------------------------------------------------------------------
) end of \1
----------------------------------------------------------------------
( group and capture to \2 (1 or more times
(matching the most amount possible)):
----------------------------------------------------------------------
\1 what was matched by capture \1
----------------------------------------------------------------------
)+ end of \2 (NOTE: because you're using a
quantifier on this capture, only the LAST
repetition of the captured pattern will be
stored in \2)
----------------------------------------------------------------------
$ before an optional \n, and the end of the
string
----------------------------------------------------------------------
) end of grouping
----------------------------------------------------------------------
m/^(11+){2,}$/
The regular expression:
(?-imsx:^(11+){2,}$)
matches as follows:
NODE EXPLANATION
----------------------------------------------------------------------
(?-imsx: group, but do not capture (case-sensitive)
(with ^ and $ matching normally) (with . not
matching \n) (matching whitespace and #
normally):
----------------------------------------------------------------------
^ the beginning of the string
----------------------------------------------------------------------
( group and capture to \1 (at least 2 times
(matching the most amount possible)):
----------------------------------------------------------------------
1 '1'
----------------------------------------------------------------------
1+ '1' (1 or more times (matching the most
amount possible))
----------------------------------------------------------------------
){2,} end of \1 (NOTE: because you're using a
quantifier on this capture, only the LAST
repetition of the captured pattern will be
stored in \1)
----------------------------------------------------------------------
$ before an optional \n, and the end of the
string
----------------------------------------------------------------------
) end of grouping
----------------------------------------------------------------------
There are some subtile differences, especially if you're relying on $1 and $2 after the match.
|