如何从perl中的字符串中捕获具有特定模式的子字符串/单词?

时间:2017-06-03 15:51:49

标签: perl

open(LOGFILE,"<sim_success.log") or die("could not open file");
while (<LOGFILE>){
$line = $_;
chomp($line);
my @design = grep (/Design:/, $line);
push (@final, @design);
}
print $final[0];

close LOGFILE;
  

设计:D:\ Test \ Example \ Example1_wrk ....

如何在perl中的var中保存“Example_wrk”?

1 个答案:

答案 0 :(得分:0)

这是一个疯狂的猜测。我想你想要的是从那行日志文件中捕获文件名。

use strict;
use warnings;

my @final;
open my $fh, '<', 'sim_success.log' or die "could not open file: $!";
while (my $line = <$fh>) {
    chomp $line;
    if ( $line =~ m/Design: (.+)$/ ) { 
        push @final, $1;
    }
}
print $final[0]; # will print only the first one
close $fh;

让我们看看我做了什么。很多这方面已经在melpomene对这个问题的评论中得到了解释。我会重申其中一些。

  • 始终use strictuse warnings!它们可以帮助您发现错误。
  • grep没有按你的想法行事。它用于查找符合条件的列表中的内容。您的列表只有一个项目。这条线。
  • 您可以直接使用m//运算符。
  • 但是您需要一个捕获组(),它可以捕获所有内容
  • 并且捕获的内容将在$1中,我们可以push到数组

程序完成后,数组@final可能包含一个或多个匹配项。如果多个行匹配,则数组中有更多条目。