不知道你常見的散列是什麼 - 或者你想捕獲什麼樣的正則表達式的部分是,我所能建議的就是如何一次測試一個正則表達式,直到你找到一個匹配。將它們放入一個循環中,然後在找到匹配項後使用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