正则表达式匹配范围或数字列表

j3d*_*j3d 4 regex

我需要一个正则表达式匹配数字列表和另一个匹配数字范围(表达式在这两种情况下都不会失败).范围应由数字,短划线和另一个数字(NN)组成,而列表应由逗号(N,N,N)分隔的数字组成.以下是一些例子.

范围:

'1-10' => OK
Whateverelse => NOK (e.g. '1-10 11-20')
Run Code Online (Sandbox Code Playgroud)

列表:

'1,2,3' => OK
Whateverelse => NOK
Run Code Online (Sandbox Code Playgroud)

这是我的两个正则表达式:

  1. [0-9] + [\ - ] [0-9] +
  2. ([0-9] + ,?)+

...但我有一些问题...例如:

在评估时'1-10',regex 2匹配1......但它不应该匹配任何东西,因为字符串不包含列表.

然后,在评估时'1-10 11-14',正则表达式1匹配1-10...但它不应该匹配任何东西,因为字符串包含的不仅仅是一个范围.

我错过了什么?谢谢.

unl*_*mit 5

试试这个:

^((\d+-(\*|\d+))|((\*|\d+)-\d+)|((\d)(,\d)+))$
Run Code Online (Sandbox Code Playgroud)

检测结果:

1-10         OK
1,2,3        OK
1-*          OK
*-10         OK
1,2,3 1-10   NOK
1,2,3 2,3,4  NOK
*-*          NOK
Run Code Online (Sandbox Code Playgroud)

正则表达式的可视化:

正则表达式的可视化

编辑:*根据OP的评论为通配符添加.