用于匹配数字和数字范围的正则表达式

时间:2013-01-29 13:46:22

标签: regex

在应用程序中,我需要验证用户输入的字符串。

一个号码 要么 范围(两个数字用' - '分隔) 要么 逗号分隔数字和/或范围的列表 和 任何数字必须介于1和999999之间。

逗号之前和之后允许使用空格和' - '。

我认为以下正则表达式会这样做。

(\d{1,6}\040?(,|-)?\040?){1,}

这匹配以下(非常好)。 (正则表达式中的\040是空格的字符。)

  • 00001
  • 12
  • 20,21,22
  • 100-200
  • 1,2-9,11-12
  • 20,21,22
  • 100 - 200
  • 1,2 - 9,11 - 12

但是,我也得到了一个匹配:

  • !!! 12

我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

你需要锚定你的正则表达式

^(\d{1,6}\040?(,|-)?\040?){1,}$

否则你将获得“!!! 12”的部分匹配,它只匹配最后的数字。

here on Regexr

答案 1 :(得分:0)

/\d*[-]?\d*/

我用perl测试了这个:

> cat temp
00001 
12 
20,21,22 
100-200 
1,2-9,11-12 
20, 21, 22 
100-200
1, 2-9, 11-12
> perl -lne 'push @a,/\d*[-]?\d*/g;END{print "@a"}' temp
00001   12   20  21  22   100-200   1  2-9  11-12   20   21   22   100-200  1   2-9   11-12 

上面的结果显示将所有正则表达式匹配放在数组中并最终打印数组元素。