如何打印匹配,我需要在Perl

问题描述:

该模式的行我对这个话题的一些问题:从数据如何打印匹配,我需要在Perl

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

我使用的源代码并修改正则表达式(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. 
+0

的就是你得到的结果呢? – Jens

+0

您好延,我得到的结果 00 000 000 000 1>β(F) 00 000 000 1 000>β(F) 00 000 1 000 000>β(F) 故障 57020 0主LDO VOUT ,IN = 3.5V,OUT = 200u输出3.480 V 3.480 V(F)3.520 V 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. 

您可以使用word boundary\b在你的比赛中,所以它不会匹配其他的东西。

更改此:

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

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

Thanks serenesat –

+0

@LeowCheesiang:很高兴帮助。 – serenesat

+0

我可以在Perl脚本上与u聊天吗? –