在应用程序中,我需要验证用户输入的字符串。
一个数字或一个范围(由‘-’分隔的两个数字)或逗号分隔的数字和/或范围的列表,任何数字必须介于1和999999之间。
在逗号和或“-”之前和后面允许有空格。
我认为下面的正则表达式可以做到这一点。
(\d{1,6}\040?(,|-)?\040?){1,}这与以下内容相匹配(这是非常好的)。(正则表达式中的\040是空格的字符)。
然而,我也得到了一个匹配的:
我在这里错过了什么?
发布于 2013-01-29 13:50:30
你需要锚定你的要塞
^(\d{1,6}\040?(,|-)?\040?){1,}$否则,您将得到部分匹配的“!12”,它只匹配在最后一个数字。
看吧,在Regexr上
发布于 2013-01-29 13:58:55
/\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 如上面所示,将所有regex匹配放在一个数组中,并最终打印数组元素。
https://stackoverflow.com/questions/14584456
复制相似问题