1
Valid1: 2

valid2: 3-5

Valid3: 2,4-6

valid4: 2,4,5

valid5: 2-7,8-9

Valid4: 2,5-7,9-13,15,17-20

上面的所有表达式都应该在一个正则表达式中有效。连字符左侧的数字应小于右侧。

4

1 回答 1

1

首先,正如上面@MikeFHay 所建议的那样,没有使用正则表达式来检查一个数字是否大于另一个数字(因为您必须解析表达式)。如果我们忽略该要求 - 其余的可以通过以下正则表达式实现:

((\d\,(?=\d))|(\d\-(?=\d))|\d)+

在 Java 中:

"((\\d\\,(?=\\d))|(\\d\\-(?=\\d))|\\d)+"

说明:
此正则表达式使用前瞻来验证每个逗号或破折号前后都有一个数字:(\d\,(?=\d))因此每个包含破折号/逗号的“子字符串”必须采用以下格式:数字、数字或数字-数字。

当然,不包含逗号/破折号的数字也是有效的 - 因此它的最右边or只是一个\d

链接到在线演示

于 2013-10-28T17:24:10.373 回答