in reply to Surprising capture of undef with zero repetitions

As another comment re: your comment "(preferably without reference to use re 'debug' ;)".

Here is another way to figure out what a regex means. Yes, I understand that in the context of your question, this wouldn't have been helpful. Eily nailed it. But this is often better than "use re 'debug'". This tip may be useful later.

#!/usr/bin/perl use warnings; use strict; use YAPE::Regex::Explain; my $REx = '/^list\s+(\w+)(?:,(\w+))*$/m'; my $exp = YAPE::Regex::Explain->new($REx)->explain; print $exp; __END__ The regular expression: (?-imsx:/^list\s+(\w+)(?:,(\w+))*$/m) 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 ---------------------------------------------------------------------- list 'list' ---------------------------------------------------------------------- \s+ whitespace (\n, \r, \t, \f, and " ") (1 or more times (matching the most amount possible)) ---------------------------------------------------------------------- ( group and capture to \1: ---------------------------------------------------------------------- \w+ word characters (a-z, A-Z, 0-9, _) (1 or more times (matching the most amount possible)) ---------------------------------------------------------------------- ) end of \1 ---------------------------------------------------------------------- (?: group, but do not capture (0 or more times (matching the most amount possible)): ---------------------------------------------------------------------- , ',' ---------------------------------------------------------------------- ( group and capture to \2: ---------------------------------------------------------------------- \w+ word characters (a-z, A-Z, 0-9, _) (1 or more times (matching the most amount possible)) ---------------------------------------------------------------------- ) end of \2 ---------------------------------------------------------------------- )* end of grouping ---------------------------------------------------------------------- $ before an optional \n, and the end of the string ---------------------------------------------------------------------- /m '/m' ---------------------------------------------------------------------- ) end of grouping ---------------------------------------------------------------------- Process completed successfully

Replies are listed 'Best First'.
Re^2: Surprising capture of undef with zero repetitions
by AnomalousMonk (Archbishop) on Jun 22, 2016 at 21:43 UTC

    It's important to note that YAPE::Regex::Explain does not support regex constructs introduced after Perl version 5.6, and in particular the extensions of version 5.10.


    Give a man a fish:  <%-{-{-{-<