in reply to Recognizing numbers

Yes, but so can YAPE::Regex::Explain.

#!/usr/bin/perl use warnings; use strict; use YAPE::Regex::Explain; print YAPE::Regex::Explain->new('^[0-9]+$')->explain(); print "\n\n"; print YAPE::Regex::Explain->new('^\S{11,}$')->explain(); __END__ The regular expression: (?-imsx:^[0-9]+$) 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 ---------------------------------------------------------------------- [0-9]+ any character of: '0' to '9' (1 or more times (matching the most amount possible)) ---------------------------------------------------------------------- $ before an optional \n, and the end of the string ---------------------------------------------------------------------- ) end of grouping ---------------------------------------------------------------------- The regular expression: (?-imsx:^\S{11,}$) 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 ---------------------------------------------------------------------- \S{11,} non-whitespace (all but \n, \r, \t, \f, and " ") (at least 11 times (matching the most amount possible)) ---------------------------------------------------------------------- $ before an optional \n, and the end of the string ---------------------------------------------------------------------- ) end of grouping ----------------------------------------------------------------------

-stevieb

Replies are listed 'Best First'.
Re^2: Recognizing numbers
by htmanning (Friar) on Jul 27, 2015 at 23:49 UTC
    Thank you for this. So am I correct that the first one detects numbers, and the second detects if there is more than 11 characters without a space? Thanks!

      Yes, that is correct, except is isn't more than 11, it's 11 or more. To elaborate, the first one is any digit, one or more times (greedy). The second is any non-whitespace character (letter, number, special char etc) a minimum of 11 times consecutively with no maximum specified (greedy).

      Also, [0-9] can be simplified with a single \d.

        Also, [0-9] can be simplified with a single \d.

        In the old ASCII times: yes.

        Today: No.

        Unicode has more digits than [0-9]. You can limit the regular expression to match in ASCII mode using the /a or /aa options, this is documented in perlop.

        Alexander

        --
        Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)