打印正则表达式匹配Perl

用户名

您好,我正在制作一个将给定关键字集与文件匹配的程序。

我想将匹配的数据输出到文本文件,并包含触发匹配的regex关键字。

以下是与我的问题相关的代码:

my $counter = 0;
foreach($words) 
{
    while($line = <FILE>)
    {
        if($line =~ /$words/)
        {
            print "@array[$counter] $line\n";
            print OUTPUT $line;
        }
    }
    $counter ++;
}

这不会产生预期的结果。它非常适合数组中的第一个元素,而对于其余元素,只需简单地再次打印第一个即可。我相信计数器不会增加。

有没有更好/更容易的方法来获取循环中正在使用的当前元素?甚至获得当前的正则表达式匹配?

7stud

这是您应该做的:

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:
  1. 在正则表达式的各个部分加上括号会导致perl设置匹配变量$ 1,$ 2,$ 3等,其中包含每个带括号的组的匹配项。

  2. $ line在该行的末尾有一个换行符,因此,如果您编写print "$line\n",则会添加另一个换行符,因此您的输出文件在每行打印之间将具有空白行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如果正则表达式匹配A而不是正则表达式B,则Perl打印

来自分类Dev

打印正则表达式匹配Perl

来自分类Dev

Perl正则表达式:与此匹配,但不匹配

来自分类Dev

匹配多行并在Perl正则表达式中打印

来自分类Dev

perl循环避免在正则表达式匹配中打印重复

来自分类Dev

Awk,仅打印与正则表达式匹配的模式

来自分类Dev

Perl正则表达式无法匹配行尾

来自分类Dev

Perl正则表达式以匹配特殊字符

来自分类Dev

Perl正则表达式匹配范围太广

来自分类Dev

Perl正则表达式匹配元音和辅音

来自分类Dev

使用正则表达式查找匹配项-Perl

来自分类Dev

Perl正则表达式条件匹配

来自分类Dev

正则表达式在Perl中不匹配

来自分类Dev

Perl迭代正则表达式匹配项的数量

来自分类Dev

Perl正则表达式与\ w +不匹配

来自分类Dev

Perl删除与正则表达式匹配的多行

来自分类Dev

单个冒号的Perl正则表达式匹配项

来自分类Dev

Perl与终端中的正则表达式匹配?

来自分类Dev

Perl正则表达式匹配数组

来自分类Dev

Perl正则表达式匹配数字

来自分类Dev

Perl-正则表达式和匹配变量

来自分类Dev

在Perl中匹配正则表达式的问题

来自分类Dev

在Perl中使用正则表达式进行匹配

来自分类Dev

Perl:正则表达式-将值与字母匹配

来自分类Dev

增强Perl正则表达式以实现平衡匹配

来自分类Dev

正则表达式Perl中的特殊行匹配

来自分类Dev

Perl正则表达式条件匹配

来自分类Dev

正则表达式匹配包含单词perl的“单词”

来自分类Dev

用Perl正则表达式提取匹配项