获取与正则表达式匹配的文件行

获取与正则表达式匹配的文件行

有没有比以下更紧凑的方法来获取与正则表达式匹配的文件行?

open my $fh, '<', $file or die "Cannot open $file: $!";
 while ( my $line = <$fh> ) {
        next unless $line =~ m/^foo\/([^\/]+\/?)*==/;
        chomp($line);
        $line =~ s/==$//g;
        $search_result_set{$line} = 1;
  }

答案1

 @lines = grep s{^foo/([^/]+/?)*\K==\n?\z}{}, <$fh>;

将在数组中存储与@lines模式匹配且删除尾随的行==\n$匹配主题末尾和\n主题尾随之前的内容,这里我们使用\n?\z(可选的\n后跟主题末尾 ( \z))来删除换行符(如果存在),有效地完成chomp工作。\K标记要替换部分的开始。

相关内容