2015-04-20 2 views
0
use strict; 
use warnings; 

print "Enter string\n"; 
my $str = <STDIN>; 
chomp($str); 

if($str =~ /[^\d*]/) 
{ 
print "\n"; 
print "*********MATCHED**********\n"; 
} 
else 
{ 
print "\n"; 
print "#######WRONG############\n"; 
} 

, когда я ввожу строку как '2323adsdf'. Он говорит, что соответствует. Что касается моих знаний, это не должно совпадать, поскольку в строке есть числа. Может ли кто-нибудь объяснить мне, почему этот матч встречается?Perl Регулярные выражения Соответствующие цифры

+1

'/ [^ \ d *] /' соответствует любому символу в строке, которая НЕ является цифрой, а не буквальной звездочкой '*' –

ответ

2

Вы должны написать это таким образом:

/^[^\d]*$/

Объяснение: Ваше регулярное выражение /[^\d*]/ матч часть строки, которая не содержит цифры или *, поэтому он будет работает до тех пор, как вы есть символы NaN в вашей строке. Маху всю линию вы должны явно сказать, что от начала до конца сделан из NaN обугливает

0

Вы могли бы сделать:

if($str =~ /\D/) { 
    print "\nNOT a Number\n"; 
} 
else { 
    print "\nThis is a number\n"; 
} 

Где \D соответствует любому символу, который не является цифрой.

Смежные вопросы