为什么使用perl正则表达式显示数字?

时间:2011-08-01 03:12:48

标签: perl

我正在使用\ D不显示数字,但为什么使用perl正则表达式显示数字?

这是text2.tx文件的内容

1. Hello Brue this is a test.
2. Hello Lisa this is a test.
This is a test 1.
This is a test 2.

这是perl程序。

#!/usr/bin/perl

use strict;
use warnings;

open READFILE,"<", "test2.txt" or die "Unable to open file";

while(<READFILE>)
{
   if(/\D/)
   {
      print;
   }
}

3 个答案:

答案 0 :(得分:3)

/ \ D /只检查该行至少有一个非数字字符(包括换行符......)。你能解释一下你想要要检查的内容吗?你期待什么输出?

如果您只想打印没有数字的行,您可以这样做:

if ( ! /\d/ )

(该行没有数字),而不是

if ( /\D/ )

(该行是否为非数字)。

答案 1 :(得分:2)

让我们来看看幕后发生了什么。你的while循环相当于:

while(defined($_ = <READFILE>))
{
    if($_ =~ /\D/)
    {
        print $_;
    }
}

因此,您正在检查该行是否包含非数字字符(它确实如此),然后打印该行。

如果您想打印Hello Brue this is a test.而不是1. Hello Brue this is a test.,那么您必须使用以下内容:

while(<READFILE>) {
    s/^\d+\. //;
    print;
}

此外,如果您使用变量而不是$_,那么它将使代码更具可读性。

答案 2 :(得分:1)

你想要的是拒绝具有数字的行而不是匹配具有非数字的行(正如你所做的那样)

while (<READFILE>) {
   print unless /\d/;
}

这将打印每一行,除非上有一个数字。