ファイルの行を検索して、それらのファイルのいずれかが正規表現のセットのいずれかと一致するかどうかを調べたいとします。Perl正規表現のどの部分が文字列にマッチしているかを知るにはどうすればよいですか?
このような何か:
my @regs = (qr/a/, qr/b/, qr/c/);
foreach my $line (<ARGV>) {
foreach my $reg (@regs) {
if ($line =~ /$reg/) {
printf("matched %s\n", $reg);
}
}
}
が、これは時間がかかることがあります。
正規表現のコンパイラが役に立ちそうです。このような最適化があります:
my $master_reg = join("|", @regs); # this is wrong syntax. what's the right way?
foreach my $line (<ARGV>) {
$line =~ /$master_reg/;
my $matched = special_function();
printf("matched the %sth reg: %s\n", $matched, $regs[$matched]
}
}「special_function」は正規表現の部分がマッチした私に言って特別なソースです
。