【发布时间】:2011-07-15 00:18:42
【问题描述】:
我想搜索一个文件的行,看看它们是否与一组正则表达式中的一个匹配。
类似这样的:
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' 是特殊的调味汁,告诉我正则表达式的哪个部分匹配。
【问题讨论】: