Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

Re: Pattern Identification

by TheDamian (Vicar)
on Oct 01, 2017 at 20:44 UTC ( [id://1200490]=note: print w/replies, xml ) Need Help??


in reply to Pattern Identification

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

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1200490]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others lurking in the Monastery: (3)
As of 2024-04-24 02:29 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found