Perl Regex没有在脚本中找到模式

时间:2014-10-20 20:10:53

标签: regex perl file-io

我正在读取日志文件的内容,在行上执行正则表达式并将结果放入数组中,但由于某种原因没有输出。

use strict;
use warnings;

my $LOGFILE = "log.file";
my $OUTFILE = "out.file";

open(LOG, "$LOGFILE") or die ("Could not open $LOGFILE: $!\n");
open(TMP, ">", "$OUTFILE") or die ("Could not open $OUTFILE: $!\n");

my @data = (<LOG> =~ /<messageBody>(.*?)<\/messageBody>/sg);

print TMP "This is a test line. \n";

foreach (@data){
   print "@data\n";
   print "\n=======================\n";
}

close TMP;
close LOG;

我的输出是一个文件(out.file),唯一的内容是&#34;这是一个测试线。&#34;我知道正则表达式有效,因为我在提示符下尝试了:  -lne&#39; BEGIN {undef $ /} while(/(.*?)</messageBody>/sg) {print $ 1} log.file&gt; TEST.FILE

我做错了什么?

2 个答案:

答案 0 :(得分:0)

如果您想打印数据的项目,那么您应该这样做:

foreach $item (@data){
   print TMP "$item\n";
   print TMP "\n=======================\n";
}

$item将循环遍历所有数组项,并将以TMP文件

编写

答案 1 :(得分:0)

您的数据可能跨越线条。

因此,在使用正则表达式之前,你需要啜饮整个事物:

my $logdata = do {local $/; <LOG>};

my @data = $logdata =~ m{<messageBody>(.*?)</messageBody>}sg;