Perl Regex匹配和循环HTML注释

时间:2017-11-20 08:24:43

标签: regex perl

我有一个包含格式数据的日志文件:

<!-- 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);
            }
       }

有人可以指导哪里出错了吗?

1 个答案:

答案 0 :(得分:3)

$1中没有任何内容。您必须将捕获括号添加到正则表达式模式

$content =~ /<!--(.*?)-->/gs

您已在注释掉的循环中正确完成了!