shell> perl -MYAPE::Regex::Explain -e \ 'print YAPE::Regex::Explain->new(q{^[\w.-]+\@(?:[\w-]+\.)+\w+$})->explain()' The regular expression: (?-imsx:^[\w.-]+\@(?:[\w-]+\.)+\w+$) 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 ---------------------------------------------------------------------- [\w.-]+ any character of: word characters (a-z, A- Z, 0-9, _), '.', '-' (1 or more times (matching the most amount possible)) ---------------------------------------------------------------------- \@ '@' ---------------------------------------------------------------------- (?: group, but do not capture (1 or more times (matching the most amount possible)): ---------------------------------------------------------------------- [\w-]+ any character of: word characters (a-z, A-Z, 0-9, _), '-' (1 or more times (matching the most amount possible)) ---------------------------------------------------------------------- \. '.' ---------------------------------------------------------------------- )+ end of grouping ---------------------------------------------------------------------- \w+ word characters (a-z, A-Z, 0-9, _) (1 or more times (matching the most amount possible)) ---------------------------------------------------------------------- $ before an optional \n, and the end of the string ---------------------------------------------------------------------- ) end of grouping ----------------------------------------------------------------------