使用Perl的多个匹配表达式

时间:2018-07-01 00:03:31

标签: regex perl

我有一个要从中提取值的输入文件。输入文件具有以下格式:

 > P-phase pairs total =         5135
 > S-phase pairs total =         4155

我想编写一个与该文本文件中的表达式匹配的Perl脚本,并在等号后输出值。下面的代码可以处理第一个值的输出,但是我想做的是也输出第二个值(4155)。修改此代码以允许多个匹配表达式的最佳方法是什么?谢谢。

#!/usr/bin/perl
use strict;
use warnings;
open (my $file, "<", "input.txt") || die ("cannot open ph2dt file.\n");
open (my $out, ">", "output.txt") || die ("cannot open outfile.\n");

while(my $line =<$file>) {
  chomp $line;
  if ($line =~ / > P-phase pairs total =.*?(\d+)/) {
    print $1;
  }
}

1 个答案:

答案 0 :(得分:1)

替换

if ($line =~ / > P-phase pairs total =.*?(\d+)/) {

使用

if ($line =~ / > [PS]-phase pairs total =.*?(\d+)/) {

if ($line =~ / > .-phase pairs total =.*?(\d+)/) {

我们最好锚定匹配项,以避免不必要的匹配和回溯,应避免使用.*?,因为它会引起严重的麻烦。这样我们得到:

if ($line =~ /^ > .-phase pairs total =\s*(\d+)/) {