hand rolled solution:
#!/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
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.