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
|