如何打印与Perl中所需模式匹配的行

时间:2015-12-15 06:41:05

标签: regex perl

我对这个主题有一些疑问:

How can I print lines after a regex match in Perl?

我正在使用源代码并将regex从数据修改为(F)。

但是当我跑步的时候,那些有F的线路也会被拿起来。虽然我已经将正则表达式更改为(F)。任何人都可以帮我吗?

这是我的数据(输入文件):

 Device#1
 00  000  000 000  1 > beta (F)
 Device#2
 00  000  000 1  000 > beta (F)
 Fail
 Device#3
 00  000  1 000  000 > beta (F)
 57020    0     Main LDO VOUT, IN = 3.5V, OUT = 200u out                    3.480 V        3.480 V        (F) 3.520 V        0.

我正在使用的代码是:

my $directory = 'C:\Users\Try';
my $motif = '(F)';

parse($motif);

sub parse{
my ($x) = (@_);  #$x=(F)
print "$x\n";
while(<INPUT>)
{
    if($_ =~ />*($x)/)

        {
        print $_."\n";
        $printable = 1;
        }
    else
        {
      #   print "ELSE\n";
        }
     #   print "FINISH 1 loop\n";
}
}

我希望得到的结果:

 00  000  000 000  1 > beta (F)
 00  000  000 1  000 > beta (F)
 00  000  1 000  000 > beta (F)
 57020    0     Main LDO VOUT, IN = 3.5V, OUT = 200u out                    3.480 V        3.480 V        (F) 3.520 V        0.

我得到的当前输出如下:

 00  000  000 000  1 > beta (F)
 00  000  000 1  000 > beta (F)
 00  000  1 000  000 > beta (F)
 Fail
 57020    0     Main LDO VOUT, IN = 3.5V, OUT = 200u out                    3.480 V        3.480 V        (F) 3.520 V        0.

2 个答案:

答案 0 :(得分:0)

变化:

if($_ =~ />*($x)/)

if($_ =~ />+.*($x)/)

因此,您只能在一行中使用>(F)

说明:

>* mean zero or more `>` so also lines with only a F will be matched (parentheses are Special character in regex)
>+.* means  one or more `>` and after that can be Zero or more character.

答案 1 :(得分:0)

您可以在匹配中使用word boundary \b,因此它与其他内容不匹配。

改变这个:

if($_ =~ />*($x)/)

if($_ =~ />*(\b$x\b)/)