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

为什么使用perl正则表达式显示数字?,perl,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. 1.你好,布鲁,这是一个测试。 2.你好,丽莎,这是一个测试。 这是一个测试1。 这是一个测试2。 下面是perl程序 #!/usr/bin/perl use strict; use warnings; op

我使用\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. 1.你好,布鲁,这是一个测试。 2.你好,丽莎,这是一个测试。 这是一个测试1。 这是一个测试2。 下面是perl程序

#!/usr/bin/perl

use strict;
use warnings;

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

while(<READFILE>)
{
   if(/\D/)
   {
      print;
   }
}
#/usr/bin/perl
严格使用;
使用警告;

打开READFILE,“/\D/只需检查该行是否至少有一个非数字字符(包括换行符…)。您能解释一下要检查的内容吗?您希望得到什么输出

如果只打印没有数字的行,请执行以下操作:

if ( ! /\d/ )
(该行没有数字),不是


(该行是否有非数字)。

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

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

此外,如果您使用变量而不是
$\uuu

则会使代码更具可读性。您想要的是拒绝具有数字的行,而不是匹配具有非数字的行(就像您正在做的那样)

while(){
打印,除非/\d/;
}

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

谢谢,但您没有理解我的问题。我的问题是,为什么我的代码打印出以数字开头的行,而它不应该打印这些行,因为我使用的是\D选项。如果要跳过以数字开头的行,则需要将“^”符号添加到假设您正在查看行的开头。(例如,使用/^\D/而不是/\D/将只查看第一个字符,而不是行中的任何位置,并检查它是否不是数字。)正确,^\D可以工作,但是如果它假设搜索整行,\D为什么不工作呢?因此,\D所做的是检查行中是否有非数字的字符。上面示例中的每行都有它识别为非数字字符的字母,因此它会打印该行。这没有任何意义,表示\D的意思^\D+$我不希望有任何输出,因为文件中的这些行包含一个数字,但无论如何都会打印出这些行,为什么?
while(defined($_ = <READFILE>))
{
    if($_ =~ /\D/)
    {
        print $_;
    }
}
while(<READFILE>) {
    s/^\d+\. //;
    print;
}
while (<READFILE>) {
   print unless /\d/;
}