2013-03-19 24 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

相關問題