2014-10-20 26 views
0

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

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),唯一的内容是“这是一个测试线”。我知道这个正则表达式的工作原理,因为我在提示符下试过它: -l''BEGIN {undef $ /} while(/(.*?)</messageBody>/sg){print $ 1} log.file> test.file

我在做什么错?

回答

0

你的数据可能跨越线。

你会因此需要使用您正则表达式前啜整个事情:

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

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

这是完美的。尽管如此,我从来没有见过这样的事情。谢谢! – cdbiggs 2014-10-20 20:47:26

0

如果要打印数据的项目,那么你应该做这样的事情:

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

$item会遍历所有数组项,将在TMP文件写入