in reply to perl equiv regex for C strtol

If you just want the numbers then /(\d+)/g will do the trick. It may be that you have further constraints than that, in which case start by reading perlretut.

True laziness is hard work

Replies are listed 'Best First'.
Re^2: perl equiv regex for C strtol
by Largins (Acolyte) on May 01, 2012 at 01:14 UTC

    Thanks for the advice.
    I have been writing code since 1968, actually the first few lines prior to that. I had a series back in the 70's in Kilobaud magazine, and spent 15 years in the Unix environment. I have used regular expressions, and even felt quite confident when it came to knowing how I was going to do something before I started. Unlike playing the piano, however I have had to re-learn how to use every time I stop for a few years.
    Now I am 65, and am lucky I remember which side of the bed to get out of
    I will however learn again, I just need a little help this evening.
    As always, I have found it on PerlMonks!
    Thanks Again - L.

    br

      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