Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Re: Pattern Identification

by TheDamian (Priest)
on Oct 01, 2017 at 20:44 UTC ( #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
Node Status?
node history
Node Type: note [id://1200490]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (5)
As of 2019-10-24 00:19 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Notices?