我有一个包含格式数据的日志文件:
<!-- 12/15/16 01:02:27:950.125
DATA1 -->
<!-- 12/15/16 01:02:27:950.373
DATA2 -->
<!-- 12/15/16 01:02:27:950.921
DATA3: Text1 -->
<!-- 12/15/16 01:02:27:951.066
DATA4: Text2 -->
我需要提取并循环注释中的所有数据。 我正在读取文件并将数据保存为一个字符串。 我已经尝试了一些解决方案但是没有问题&#34; undef&#34;在比赛中
use strict;
use Data::Dumper;
use File::Basename;
use Time::HiRes qw( usleep ualarm gettimeofday tv_interval );
use Date::Format;
use DateTime;
use warnings;
.
.
.
if ( open(ORIGFILE, $filepath) ) {
my @wrp_record_content = <ORIGFILE>;
# my $content = join('', @wrp_record_content);
# my @matches = $content =~ s/<!--(.*)-->//g;
# my $data;
# while ( <ORIGFILE> ) {
# $data .= $_;
# }
# while ( $data =~ m/<!--(.*)-->/g ) {
# print Dumper('===DATA===');
# print Dumper($data);
# }
my $content = join('', @wrp_record_content);
#print Dumper('------CONTENT------');
#print Dumper($content);
#print Dumper('------ CONTENT ENDED ------');
my @matches;
while ($content =~ /<!--.*?-->/gs) {
push @matches, $1;
}
foreach my $m (@matches) {
print Dumper('===MATCH===', "\n");
print Dumper($m);
}
}
有人可以指导哪里出错了吗?
答案 0 :(得分:3)
$1
中没有任何内容。您必须将捕获括号添加到正则表达式模式
$content =~ /<!--(.*?)-->/gs
您已在注释掉的循环中正确完成了!