#!/usr/bin/perl --
use Regexp::English;
print Regexp::English ->new
->remember
->multiple
->digit, "\n";
__END__
(?^:((?:\d+)))
Becomes
my( @numbers ) = $str -~ m{ (\d+) }gx;
/g means global match (match them all), x means ignore literal white space in pattern
YAPE::Regex::Explain can explain a lot of these (though it could use some updating)
use YAPE::Regex::Explain;
print YAPE::Regex::Explain->new(
qr{ (\d+) }x,
)->explain;
__END__
The regular expression:
(?x-ims: (\d+) )
matches as follows:
NODE EXPLANATION
----------------------------------------------------------------------
(?x-ims: group, but do not capture (disregarding
whitespace and comments) (case-sensitive)
(with ^ and $ matching normally) (with . not
matching \n):
----------------------------------------------------------------------
( group and capture to \1:
----------------------------------------------------------------------
\d+ digits (0-9) (1 or more times (matching
the most amount possible))
----------------------------------------------------------------------
) end of \1
----------------------------------------------------------------------
) end of grouping
----------------------------------------------------------------------
See also Visual (perl/Tk) regex tweaking utility (its like a living cheatsheet). See also perlrequick
And see Regexp::Common
$ perl -MRegexp::Common -e " print $RE{num}{int} "
(?:(?:[+-]?)(?:[0123456789]+))
And the magic of /x revealed
#!/usr/bin/perl --
use strict; use warnings;
my $REint = qr{
#---------------------------------------------------------------------
+-
(?: # group, but do not capture:
#---------------------------------------------------------------------
+-
(?: # group, but do not capture:
#---------------------------------------------------------------------
+-
[+-]? # any character of: '+', '-' (optional
# (matching the most amount possible))
#---------------------------------------------------------------------
+-
) # end of grouping
#---------------------------------------------------------------------
+-
(?: # group, but do not capture:
#---------------------------------------------------------------------
+-
[0123456789]+ # any character of: '0', '1', '2', '3',
# '4', '5', '6', '7', '8', '9' (1 or
# more times (matching the most amount
# possible))
#---------------------------------------------------------------------
+-
) # end of grouping
#---------------------------------------------------------------------
+-
) # end of grouping
#---------------------------------------------------------------------
+-
}x; # end of qr
print "$_\n" for "1 plus 1 is 2" =~ m/$REint/g
__END__
1
1
2
|