2013-03-19 86 views
0

我试图通过正则表达式在字符串中找到正数和负数。我已经得到了一个正则表达式模式,但是我怎么反驳负数的负号?我知道我可以有两个if陈述,但我想知道是否有正则表达式快捷键。如何在Perl中打印出正数或负数十进制数?

my $number = 'I have a number that is a-32.10a'; 

if($number =~ /[-]?(\d+)(\.?(\d+))/){ 
    print "Number: $1$2\n"; 
}else{ 
    print "No match\n"; 
} 

只返回32.10;我想要返回-

相反,如果$number是整数例如= 234,如何才能打印出整数并打印小数点后的no match

回答

5

您没有将可选-添加到您的捕获组中。

此代码:

my $string = 'I have a number that is a-32.10a'; 

my ($number) = ($string =~ /(-?\d+\.?\d+)/); 

if (defined $number) { 
    print "Number: $number\n"; 
} else { 
    print "Not a number!\n"; 
} 
+0

不同的方法,但很好知道。感谢帮助! – Stephen 2013-03-19 06:00:44

3

要获得-你为什么不只是使用/(-?\d+\.?\d+)/?为什么你打印一个“整数”,而-32.10实际上不是?

+0

对不起,应该是“数字”。谢谢您的帮助 – Stephen 2013-03-19 06:00:09

相关问题