Here's another approach, which I find clean and easy to maintain.

It uses named captures to label each alternative. If the regex matches, the named capture hash (%+) will have only a single key, which will be the label of the alternative that matched.

This approach should be reasonably fast but, as others have said, you'll definitely need to benchmark to find the most efficient solution (which might even vary depending on which version of Perl you're running).

use 5.010; use strict; use warnings; my $CLASSIFIER = qr{ (?<date> \d{2}.\d{2}.\d{2} ) | (?<date> \d{2}.\d{2}.\d{4} ) | (?<RMTTC> [A-Z]{2}\d{9}[A-Z]{2} ) | (?<Visa> \d{16} ) | (?<EAN13> \d{13} ) }x; while (my $input = <DATA>) { chomp $input; my $answer = $input =~ /^$CLASSIFIER$/ ? (keys %+)[0] : 'unknown'; print "$input is $answer\n"; } __DATA__ 12 12 17 09 30 2O17 09 30 2017 09 30 12017 123123123123123 1231231231231231 12312312312312312 456456456456 4564564564567 45645645645678 QW123456789WQ

In reply to Re: Pattern Identification by TheDamian
in thread Pattern Identification by WhiteTraveller

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.