in reply to Re^2: perl equiv regex for C strtol
in thread perl equiv regex for C strtol

Hi

Regexp::English

#!/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