代码之家  ›  专栏  ›  技术社区  ›  James Cadd

正则表达式匹配0-999,但不为空

  •  0
  • James Cadd  · 技术社区  · 14 年前

    我正在使用正则表达式来匹配有效的整数,例如:

    • 0
    • 1
    • 999

    但是,它不应该允许匹配空字符串。最接近的是:

    (0)|\\d{1,3}
    

    4 回复  |  直到 14 年前
        1
  •  10
  •   Peter Boughton    14 年前

    这将匹配(仅)一系列一到三个数字(包括0或00或01或012-不清楚是否需要后面的数字):

    ^\d{1,3}$
    

    它将不匹配空字符串(但也不会匹配原始的复杂表达式)。

    ^ $ 锚定。)

    但也许regex不是最好的选择-你使用的任何一种基本语言都没有isNumeric函数吗?

    要允许0,但不允许其他以0为前缀的数字,可以使用:

    0|[1-9]\d{0,2}
    

    ^(?:0|[1-9]\d{0,2})$
    
        2
  •  5
  •   Steve Wortham    14 年前

    这个怎么样?

    ^[1-9][0-9]{1,2}$|^\d$
    

    0
    1
    99
    999
    

    但不匹配:

    01
    001
    1234
    
        3
  •  1
  •   JAB    14 年前

    你的目的是什么 (0)| ? \d 是任意数字,0是数字。 \\d{1,3} 应该很好。或者不需要前导零?

    不管怎样,这要么是你所使用的regex引擎的问题,要么是你正在做一个不必要的转义 在那里。也许regex引擎不支持 {min, max} 语法?

        4
  •  0
  •   Aif    14 年前
    ^[0-9]+$
    

    应该工作:它说有一个数字,任何一个介于0和9之间的数字从字符串的开头到结尾至少有一次。

    其他perl测试:

    #!/usr/bin/env perl
    
    my @str = ('', ' ', '9', '99', '123');
    
    foreach (@str) {
        print "$_ -> ";
        if (/^[0-9]+$/) {
        print "match\n";
        }
        else {
        print "not match\n";
        }
    }