您好,我正在制作一个将给定关键字集与文件匹配的程序。
我想将匹配的数据输出到文本文件,并包含触发匹配的regex关键字。
以下是与我的问题相关的代码:
my $counter = 0;
foreach($words)
{
while($line = <FILE>)
{
if($line =~ /$words/)
{
print "@array[$counter] $line\n";
print OUTPUT $line;
}
}
$counter ++;
}
这不会产生预期的结果。它非常适合数组中的第一个元素,而对于其余元素,只需简单地再次打印第一个即可。我相信计数器不会增加。
有没有更好/更容易的方法来获取循环中正在使用的当前元素?甚至获得当前的正则表达式匹配?
这是您应该做的:
use strict;
use warnings;
use 5.016;
my $fname = 'data.txt';
my @patterns = (
'do.',
'.at',
'.ir.',
);
open my $INFILE, '<', $fname
or die "Couldn't read from $fname: $!";
while (my $line = <$INFILE>) {
for my $pattern (@patterns) {
if ($line =~ /($pattern)/) {
print "$pattern --> $1";
}
}
}
close $INFILE:
在正则表达式的各个部分加上括号会导致perl设置匹配变量$ 1,$ 2,$ 3等,其中包含每个带括号的组的匹配项。
$ line在该行的末尾有一个换行符,因此,如果您编写print "$line\n"
,则会添加另一个换行符,因此您的输出文件在每行打印之间将具有空白行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句