一般的なハッシュが何であるか、またはキャプチャしたい正規表現の部分がわからない場合、私が提案できるのは、一致するまで各正規表現を一度に 1 つずつテストする方法だけです。それらをループに入れて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" );
}