#!/usr/local/bin/perl
use strict;
my @array = (
'account_trend',
'trend_report',
'revenuebytrafficker',
'ticketstatus',
'lostinventory',
'campaigndetail',
'campaignsummary',
'packagesummary',
'placementsummary',
'bookedbyaccount',
'bookedbysalesperson',
'accounttrends',
'salespersontrends',
'salessitetrend',
'placementperformance',
'packageperformance',
'forcastsummary'
);
my @values =
(
'??m*',
'reve*ker',
'accoun*end',
);
for ( @values )
{
print "mask: $_\n";
my $regex = mask2re ($_);
print "re $regex\n";
print join ("\n", grep { /$regex/ } @array), "\n\n";
}
#turns a simple mask into a regex where * means
#none ore more chars amd ? means exactly one char
sub mask2re
{
#replacements (after quotemeta)
my %map =
(
"\\*" => ".*?",
"\\?" => ".",
);
#quotema everything
my $re = quotemeta ($_[0]);
#replace * and ? by regex active statements
$re =~ s/(\\[\*|\?])/$map{$1}/g;
#return compiled regex
return qr/^$re/;
}
Output:
mask: ??m*
re (?-xism:^..m.*?)
campaigndetail
campaignsummary
mask: reve*ker
re (?-xism:^reve.*?ker)
revenuebytrafficker
mask: accoun*end
re (?-xism:^accoun.*?end)
account_trend
accounttrends
|