+ -
当前位置:首页 → 问答吧 → 正则为什么没有提取出来正确的匹配?

正则为什么没有提取出来正确的匹配?

时间:2010-10-06

来源:互联网

  1. use strict;
  2. use warnings;

  3. main(@ARGV);

  4. sub main
  5. {
  6.     my $line;
  7.     open FH,"x.txt";
  8.     while ($line=<FH>){
  9.         $line=~/(^[a-z]4)/;
  10.         print $line;
  11.     }
  12.     close FH;
  13. }
  14. sub message
  15. {
  16.     my $m=shift or return;
  17.     print "$m\n";
  18. }
复制代码
文本文件是
cat x.txt
  1. the
  2. thel
  3. 1
  4. 12345
复制代码
结果是全部输出了!

the
thel
1
12345

作者: laohuanggua   发布时间: 2010-10-06

我想输出用俩个字母开头的行


use strict;
use warnings;

main(@ARGV);

sub main
{
    my $line;
    open FH,"x.txt";
    while (<FH>){
        /(^[a-z]2)/;
        print $1 if $1;
    }
    close FH;
}
sub message
{
    my $m=shift or return;
    print "$m\n";
}

结果是空的!

作者: laohuanggua   发布时间: 2010-10-06



QUOTE:
我想输出用俩个字母开头的行




$ perl -Mstrict -e '
my $str = "the
thel
1
12345";
open my $fd,"<",\$str or die $!;
while(<$fd>) {
    next unless /^[a-zA-Z]{2}/;
    print;
}
close $fd '

the
thel

作者: 兰花仙子   发布时间: 2010-10-06

多谢版主!

原来是/^[a-z]{2}/。

open居然可以打开字符串!perl很给力啊~~~

作者: laohuanggua   发布时间: 2010-10-06

print $line if $line=~/(^[a-z]4)/;

原来的错误在于,你只进行了匹配测试,而没有根据测试结果就进行了输出,这样不论匹不匹配都会输出的。

作者: bruclan   发布时间: 2010-10-06