0

我试图通过正则表达式在字符串中查找正数和负数。我已经得到了一个正则表达式模式,但是我如何为负数吐出一个负号?我知道我可以有两个if语句,但我想知道是否有正则表达式快捷方式。

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小数?

4

2 回答 2

5

您没有将 optional 包含-在您的捕获组中。

此代码有效:

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";
}
于 2013-03-19T05:54:20.633 回答
3

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

于 2013-03-19T05:55:03.697 回答