Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 匹配数字和数字范围的正则表达式_Regex - Fatal编程技术网

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

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 然而,我

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

一个数字 或 范围(由“-”分隔的两个数字) 或 逗号分隔的数字和/或范围的列表 及 任何数字必须介于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,}$
否则,您将在“!!!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