mrbbq has asked for the wisdom of the Perl Monks concerning the following question:

Hello monks. I am a n00b and I am trying to fix some scripts that i didnt write and I am stumped on a regular expression. Could some just read off in english what these are trying to match? Thanks.
The first one:
$_ =~ /^(\s+)MVA/o
The second one:
$_ =~ s/(\s+)//o
what exactly are these trying to match?
Thanks!

20040701 Edit by castaway: Changed title from 'N00b'

Replies are listed 'Best First'.
Re: Help with regexes
by Enlil (Parson) on Jun 30, 2004 at 00:09 UTC
    Hello monks. I am a n00b and I am trying to fix some scripts that i didnt write and I am stumped on a regular expression

    If you have time you might want to peruse the documentation on regexes in general at perlreftut and perlre).

    As you might run into more regular expressions you might want to look into using YAPE::Regex::Explain which makes deciphering Regexes easy for instance

    perl -MYAPE::Regex::Explain -e 'print YAPE::Regex::Explain->new(qr/^(\ +s^+)MVA/o)->explain;'
    will return the following for your first regex:
    The regular expression: (?-imsx:^(\s^+)MVA) 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 ---------------------------------------------------------------------- ( group and capture to \1: ---------------------------------------------------------------------- \s whitespace (\n, \r, \t, \f, and " ") ---------------------------------------------------------------------- ^+ the beginning of the string (1 or more times (matching the most amount possible)) ---------------------------------------------------------------------- ) end of \1 ---------------------------------------------------------------------- MVA 'MVA' ---------------------------------------------------------------------- ) end of grouping ----------------------------------------------------------------------
    and then for the second one:
    perl -MYape::Regex::Explain -e 'print YAPE::Regex::Explain->new(qr/(\s ++)/o)->explain;' The regular expression: (?-imsx:(\s+)) 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): ---------------------------------------------------------------------- ( group and capture to \1: ---------------------------------------------------------------------- \s+ whitespace (\n, \r, \t, \f, and " ") (1 or more times (matching the most amount possible)) ---------------------------------------------------------------------- ) end of \1 ---------------------------------------------------------------------- ) end of grouping ----------------------------------------------------------------------

    HTH

    -enlil

Re: Help with regexes
by ercparker (Hermit) on Jun 29, 2004 at 23:13 UTC
    the first one is matching : begin with one or more space followed by MVA and capturing the spaces
    the second one is replacing : one or more space with nothing
    the o modifier causes pattern to only be compiled once
Re: Help with regexes
by borisz (Canon) on Jun 29, 2004 at 23:49 UTC
    ercparker says it all. Beside that the $_ =~ is optional.
    you can write
    /^(\s+)MVA/o s/(\s+)//o
    and get the same result.
    Boris