Regex 匹配数字和数字范围的正则表达式
在应用程序中,我需要验证用户输入的字符串 一个数字 或 范围(由“-”分隔的两个数字) 或 逗号分隔的数字和/或范围的列表 及 任何数字必须介于1和999999之间 逗号和或“-”前后允许有空格 我想下面的正则表达式就可以了Regex 匹配数字和数字范围的正则表达式,regex,Regex,在应用程序中,我需要验证用户输入的字符串 一个数字 或 范围(由“-”分隔的两个数字) 或 逗号分隔的数字和/或范围的列表 及 任何数字必须介于1和999999之间 逗号和或“-”前后允许有空格 我想下面的正则表达式就可以了 (\d{1,6}\040?(,|-)?\040?){1,} 这符合以下条件(非常好)。(\040在正则表达式中是空格字符) 00001 十二, 20,21,22 100-200 1,2-9,11-12 20、21、22 100-200 1,2-9,11-12 然而,我
(\d{1,6}\040?(,|-)?\040?){1,}
这符合以下条件(非常好)。(\040
在正则表达式中是空格字符)
- 00001
- 十二,
- 20,21,22
- 100-200
- 1,2-9,11-12
- 20、21、22
- 100-200
- 1,2-9,11-12
- !!!十二,
我在这里遗漏了什么?你需要锚定你的正则表达式
^(\d{1,6}\040?(,|-)?\040?){1,}$
否则,您将在“!!!12”上获得部分匹配,它仅在最后几位匹配
看到了吗
我已经用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
正如上面的结果所示,将所有正则表达式匹配项放入一个数组,并最终打印数组元素。那么,您的正则表达式也将匹配
234234-
,以及34,24,
。不确定你是否想要这些。当我运行它时,它与中的数字匹配!!!12所以只有12个匹配,这对我来说似乎没问题,因为没有为指针指定锚或单词边界。我正在使用Expresso(),在添加锚时它对我不起作用。它现在在我的C#应用程序中对我有效。目前正在研究为什么这不适用于Expresso。我不知道Expresso,但我假设您需要设置多行修饰符m
,将示例列表作为输入。(我在Regexr上就是这样做的)谢谢,我明天会试试。昨天对我来说,那真是一个当头一棒的时刻。这确实是多行选项。为我辩护,它被整齐地藏在Expresso中;-)。谢谢你们的帮助。
> 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