in reply to Grep match alternative

See perlre. [] is a character class (perlrecharclass):

c:\>perl -le "print $_, qq(\t), /\.[docx|pdf]$/ ||0 for qw(.pdf .docx +.p .d .f .d .o .c .x .|);" .pdf 0 .docx 0 .p 1 .d 1 .f 1 .d 1 .o 1 .c 1 .x 1 .| 1

(?:) is a non-capturing group:

c:\>perl -le "print $_, qq(\t), /\.(?:docx|pdf)$/ ||0 for qw(.pdf .doc +x .p .d .f .d .o .c .x .|);" .pdf 1 .docx 1 .p 0 .d 0 .f 0 .d 0 .o 0 .c 0 .x 0 .| 0

edit: fix typo (missing "?:" in my second one-liner)

Replies are listed 'Best First'.
Re^2: Grep match alternative
by IB2017 (Pilgrim) on Oct 11, 2017 at 21:02 UTC

    Perfect explanation, thank you!

      Your regex is simple enough (i.e., it uses no regex construct introduced after Perl version 5.6) that the hoary YAPE::Regex::Explain can still be informative:

      c:\@Work\Perl\monks>perl -wMstrict -le "use YAPE::Regex::Explain; ;; print YAPE::Regex::Explain->new(qr/\.[docx|pdf]$/)->explain; " The regular expression: (?-imsx:\.[docx|pdf]$) 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): ---------------------------------------------------------------------- \. '.' ---------------------------------------------------------------------- [docx|pdf] any character of: 'd', 'o', 'c', 'x', '|', 'p', 'd', 'f' ---------------------------------------------------------------------- $ before an optional \n, and the end of the string ---------------------------------------------------------------------- ) end of grouping ----------------------------------------------------------------------
      See also perlretut, and perlrequick.


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