LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1414|回复: 7

刚学perl,问一个很弱的问题

[复制链接]
发表于 2004-3-6 10:14:07 | 显示全部楼层 |阅读模式
有一个文件如下示,要找出其中有用的部分来,是在那一章正则表达式匹配的一道习题了,
4:20am 99:45am 3:0 2:23pm 44:00am 2:60am

如上这些数据找出时间有用的部分来,像第一,四,
发表于 2004-3-6 11:26:06 | 显示全部楼层
#!/usr/bin/perl
die "请输入要处理的文本文件\n" unless $ARGV[0];

if (-e $ARGV[0]) {
        open (TEXT,$ARGV[0]) or die "不能打开文件:$ARGV[0]";
        print "符合要求的时间为:\n";
        while (<TEXT>) {
                @lines = split(/\s+/);
                foreach (@lines) {
                        /(\d+)\d+)([a|p]+m)/i and do {
                                if ($1<24 && $2<60) {
                                        print "$_\t";
                                };
                        }
                }
        }
}
else {
        print "文件不存在,请确认路径是否正确!";
}
 楼主| 发表于 2004-3-6 13:59:55 | 显示全部楼层

hehe

我用   [1-2]{0,1}\d:\d\d\w\w 怎么就匹配不了呢
发表于 2004-3-8 10:46:16 | 显示全部楼层
99:45am ??
发表于 2004-3-12 12:51:53 | 显示全部楼层
$test="4:20am 99:45am 3:0 2:23pm 44:00am 2:60am";
my ($one,$two,$three,$four,$five,$six)=split(/ +/,$test);
print $one,"\n",$two,"\n","$three","\n","$four","\n",$five,"\n",$six;
发表于 2004-3-12 19:16:58 | 显示全部楼层
楼主要的是“有用的部分”,象44:00am就不是,必须是正确的时间才行
发表于 2004-3-12 19:26:17 | 显示全部楼层
看看这个行不行:

  1. #! /usr/bin/perl -w

  2. $_="4:20am 99:45am 3:0 2:23pm 44:00am 2:60am";
  3. foreach(split){
  4.   if(/^(\d+):(\d+)[ap]m$/){
  5.     if(($1 * 60 + $2 <= 12 * 60) and ($2 < 60)){
  6.       print $_, "\n";
  7.     }
  8.   }
  9. }
复制代码
发表于 2004-3-12 20:24:00 | 显示全部楼层

回复: 刚学perl,问一个很弱的问题

最初由 elico_yqf 发表
有一个文件如下示,要找出其中有用的部分来,是在那一章正则表达式匹配的一道习题了,
4:20am 99:45am 3:0 2:23pm 44:00am 2:60am

如上这些数据找出时间有用的部分来,像第一,四,


你原来的软件有问题?那就不是好软件了,还是自己写的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表