如何匹配以提取出如下内容?



QUOTE:
原帖由 windows.li 于 2007-11-7 08:25 发表 #看看上面那个程序中$money的结果不是还有“次数:*”项么?在这个程序中怎么没有该项阿,如何屏蔽掉该项的?
请赐教!

楼上的兄弟都给你写的很详细的了,还是多看看书吧!
open('FIN', '<', 'input.txt') || die "Oops: $!\n";

while (my $line = <FIN>) {
    my $money = (split(/\s+/, $line))[3];
    $line = <FIN>;
    #$line =~ /(费用.*元)/;

    print "$money $1\n";
}

屏蔽掉 次数:*


问题就处在Lonki兄是以每两条记录做为一个单元来处理的,而你以一条记录作为单元来处理的
上面我都给你列出了事例,如果还不行,那我也没办法了。。
我倒,说实话,你该多动动脑子,这个完全没有任何特别技巧可言
你比别人少一句,那你一次循环就读一行
取每行的第4列,那当然出你那个结果了

看来你连split那句都没看懂,可是别人已经给你解释的很详细了
小伙子,有时候自己看看比问别人快....
while (my $line = <FIN>) {                     #读取第一行 即(200709    100188888888 )
    my $money = (split(/\s+/, $line))[3];  #$money  =110;
    $line = <FIN>;                              #读取第二行 即(小计 : 费用:5.00元 次数:5 时长:30 )
    $line =~ /(费用.*元)/;                    #$line=费用:5.00元;
    print "$money $1\n";
}
先谢谢诶大家了!
刚刚想明白了,$line=<>;的意思是逐行读取!
smonkey0 老大楼上的帖子也验证了我的看法,谢谢。
一直没有弄明白<>符号工作流程,即使看了大骆驼相关的内容(有些专业概念不是很好理解)。现在懂了,“逐行读入”!!
在论坛多愚昧上万回,我也就成高手了,哈哈!大家要支持呀,霍霍!


QUOTE:
原帖由 windows.li 于 2007-11-7 10:44 发表
先谢谢诶大家了!
刚刚想明白了,$line=;的意思是逐行读取!
smonkey0 老大楼上的帖子也验证了我的看法,谢谢。
一直没有弄明白符号工作流程,即使看了大骆驼相关的内容(有些专业概念不是很好理解)。现在懂 ...

应该说是以$/作为分隔符读取
#!/bin/perl
open(DATA,"./match.data.txt") or die "Failed to open data file error

code $!";
foreach my $line (<DATA>){
chomp $line;
print "". (split(/\s+/,$line))[3] if($line !~/:/);

print " ".$&."\n" if($line=~/费用.*元/);


}