正则表达式匹配0 - 999但不是空白

时间:2010-06-18 15:53:49

标签: regex

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

  • 0
  • 1
  • 99
  • 999

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

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

对我来说,匹配的字符串将包含1到3个字符之间的零或一系列数字。但是,空字符串仍然看起来与此模式匹配。从这个正则表达式中排除空字符串的正确方法是什么?

4 个答案:

答案 0 :(得分:9)

这将匹配(仅)一系列一到三个数字(包括0或00或01或012 - 如果需要后者则不清楚):

^\d{1,3}$

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

(要将其作为较大字符串的一部分,请移除^$锚点。)

但也许正则表达式不是最好的选择 - 你使用的任何基本语言都没有isNumeric函数吗?

要允许0而不是其他0前缀数字,您可以使用:

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

或者,确保这是整场比赛:

^(?:0|[1-9]\d{0,2})$

答案 1 :(得分:5)

这个怎么样?

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

这将匹配:

0
1
99
999

但不会匹配:

01
001
1234

答案 2 :(得分:1)

  

(0)| \ d {1,3}

(0)|的目的是什么? \d是任何数字,0是数字。 \\d{1,3}应该做得很好。或者你不想要领先零?

无论如何,无论你正在使用什么样的正则表达式引擎都是一个问题,和/或你在\d那里做了不必要的逃避。也许正则表达式引擎不支持{min, max}语法?

编辑:对于那些给出匹配字符串开头和结尾的例子的人:你为什么假设被检查的字符串只包含一个被检查的整数?

答案 3 :(得分:0)

^[0-9]+$

应该有效:它表示有一个数字,从字符串的开头到结尾至少有一次在0到9之间的任何一个。

使用grep -E测试:空行不打印,空格不打印,但9或99打印9或99。

使用perl进行其他测试:

#!/usr/bin/env perl

my @str = ('', ' ', '9', '99', '123');

foreach (@str) {
    print "$_ -> ";
    if (/^[0-9]+$/) {
    print "match\n";
    }
    else {
    print "not match\n";
    }
}