在perl中的文本文件中搜索相等的运算符

时间:2014-05-27 04:55:45

标签: perl

我的文本文件具有相同的符号,如下所示,是行的开头的许多倍。我怎样才能提取这样一条线。我已经尝试了下面的代码,但它不起作用。有关为什么不匹配的线索?

文字文件行:

[==========] 10 tests from 4 test cases ran. (43950 ms total)

代码:

if (/^\Q[==========]\E/ .. /^\Qran\)\E/) {
        print "$i.Match Found:".$_."\n";
        $i++;
   }

3 个答案:

答案 0 :(得分:1)

试试这个,没有经过测试,但应该有效。我测试了正则表达式并且它有效。

#!/usr/bin/perl

use strict;
use warnings;

open (somefile, 'data.txt');

while(<somefile>) {
  chomp;
  if ( $_ =~ m/^\[==========\]/ ) {
    print "Match found: ";
  }
}

close (somefile);

为澄清目的; chomp从行尾删除新行,在这种情况下不是必需的。

答案 1 :(得分:0)

#!/usr/bin/perl
# your code goes here
use strict;
use warnings;
while(chomp(my $line = <DATA>)) {
  if ( $line =~ m$^\[=.*?]$ ){
    print "Line which starts with [==] is $line\n";
  }
}
__DATA__
[==========] 10 tests from 4 test cases ran. (43950 ms total)
A line without the equal signs at the beginning
[==========] 4 tests from 2 test cases ran. (30950 ms total)
[===]A line with equal signs at beginning.

Demo

答案 2 :(得分:0)

您正在使用触发器操作符,该操作符将匹配从第一个正则表达式开始到第二个正则表达式(或数据末尾)的行。从你正在使用的正则表达式,我不认为这是你的意图。

要匹配以[==========]开头的行并将所有内容提取到单词ran,您需要使用capture group

if (/^\Q[==========]\E(.*?ran)/) {
    print "$. Match Found: $1\n";
}

括号匹配任何字符,包括ran,然后将它们放在特殊的$1变量中。另请注意,使用$.(当前行号)可以节省您使用$i计算的数量。

如果您只想提取可以使用的数字:

if (/^\Q[==========]\E (\d+) tests from (\d+) test cases ran/) {
    print "$. Match Found: $1 $2\n";
}