我正在使用\ 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;
}
}
答案 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/;
}
这将打印每一行,除非上有一个数字。