Parse::RecDescent解析文本的例子

 #!/usr/bin/perl -w
use strict;
use Parse::RecDescent;
use Data::Dumper;

sub chomp_str{
    my ( $str ) = @_;
   
    $str=substr($str,0,index($str,"/t"));
   
    return $str;
}

my $grammar = q{
    one_day_list: numbers "/" numbers "/" numbers any_world every_list(s?) one_day_list(s?)
                    { $return = { play_day => "$item[1]/$item[3]/$item[5]", week => ::chomp_str($item[6]),
                        play_time   => $item[7][1]{'play_time_split'}{'hour'}.':'.$item[7][1]{'play_time_split'}{'minute'}.':'.$item[7][1]{'play_time_split'}{'second'},
                        play_length => $item[7][1]{'play_length'},
                        play_title  => ::chomp_str($item[7][1]{'play_title'}),
                        play_list_all   => $item[7],
                        #play_list_all_next   => $item[8],
                         } }
    every_list  : show_time numbers any_world
                    { $return = { play_time_split =>$item[1], play_length => $item[2], play_title => $item[3] }; }
    show_time   : numbers ":" numbers ":" numbers
                    { ( $return ) = { hour =>$item[1], minute => $item[3], second => $item[5] } }
    numbers     : /^/d+/ {$return = $item[1]}
    any_world   : /^.+/
};
my $sgf_parser = Parse::RecDescent->new($grammar);

undef $/;
my $sgf = <DATA>;

$::RD_HINT = 1;

print "===========one_day_list=============/n";
my $tree = $sgf_parser->one_day_list($sgf);
print Dumper($tree);

#print "=============show_time==============/n";
#my $prop = $sgf_parser->show_time("00:00:00");
#print Dumper($prop);

#print "============every_list==============/n";
#my $prop1 = $sgf_parser->every_list("01:02:03  33 sdasdfsadf");
#print Dumper($prop1);


__DATA__
08/07/21 星期一  

04:00:00 23 讲述:2008-202
04:28:00 30 探索·发现:2008-157
04:58:00 30 见证:2008-192

08/07/22 星期二  

04:00:00 23 讲述:2008-202
04:28:00 30 探索·发现:2008-157
04:58:00 30 见证:2008-192

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值