我正在使用正则表达式来匹配有效的整数,如下所示:
但是它不应该允许匹配空字符串。我能得到的最接近的是:
(0)|\\d{1,3}
对我来说,匹配的字符串将包含1到3个字符之间的零或一系列数字。但是,空字符串仍然看起来与此模式匹配。从这个正则表达式中排除空字符串的正确方法是什么?
答案 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";
}
}