不知道你常见的散列是什么 - 或者你想捕获什么样的正则表达式的部分是,我所能建议的就是如何一次测试一个正则表达式,直到你找到一个匹配。将它们放入一个循环中,然后在找到匹配项后使用last
关键字来中止循环。
$str = "%v:%{local}p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\" %D";
@regexes = (qr/\%\{[\-\w]+\}\w/g , qr/\%\w+/g);
foreach my $regex (@regexes) {
if ($str =~ $regex) {
# update hash here
...
last; # exit loop
}
}
用枪指着我的头,如果我猜你想捕捉我建议的如下内容:
$str = "%v:%{local}p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\" %D";
@regexes = (qr/\%\{([\-\w]+)\}\w/g , qr/\%(\w+)/g);
my %words =();
foreach my $regex (@regexes) {
if ($str =~ $regex) {
# update hash here
my $word = $1;
$words{$word}++;
last; # exit loop
}
}
# print out words found
foreach my $word (sort keys %words) {
print("$word\n");
}
四处错误:裸词发现,其中运营商预计将在t.pl线3条,近“qr/\%\ {[\ - \ w] + \} \ w/g” – pradeepchhetri
qr(...)不需要/ g。 – Dallaylaen
是的,你必须写:'$ str =〜/ $ regex/g' – shawnhcorey