\ d +正则表达式在开头忽略减去

时间:2014-02-05 09:26:51

标签: regex perl

我遇到了Perl的行为,我无法解释:

#!/usr/bin/perl

use strict;
use warnings;

my $number = -10;
if ($number =~ /\d+/) {
    print $number;
}

这打印-10尽管如此,

  • \ d代表[0-9]

为什么它在开头忽略减去?

4 个答案:

答案 0 :(得分:7)

您应该使用^:

匹配字符串的开头
if ($number =~ /^\d+/) {

答案 1 :(得分:2)

减号是一个符号,而不是数字,所以请使用:

if ($number =~ /^-?\d+$/) {
    print $number;
}

-?表示减去-符号可以满足一次或零次

答案 2 :(得分:1)

您可以将其写为

if ($number and $number !~ /\D/) {
  print $number;
}

检查字符串是否为零长度且不包含任何非数字字符。

答案 3 :(得分:0)

无论\ d +或[0-9] +的目的是什么,它只做正确的事情。这取决于你的要求你想要的其他东西,如整数混合或只是负数匹配或正数匹配或开始,结束,任何地方等。所有取决于你想要发展的模式。