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
上面的所有表达式都应该在一个正则表达式中有效。连字符左侧的数字应小于右侧。
首先,正如上面@MikeFHay 所建议的那样,没有使用正则表达式来检查一个数字是否大于另一个数字(因为您必须解析表达式)。如果我们忽略该要求 - 其余的可以通过以下正则表达式实现:
((\d\,(?=\d))|(\d\-(?=\d))|\d)+
在 Java 中:
"((\\d\\,(?=\\d))|(\\d\\-(?=\\d))|\\d)+"
说明:
此正则表达式使用前瞻来验证每个逗号或破折号前后都有一个数字:(\d\,(?=\d))
因此每个包含破折号/逗号的“子字符串”必须采用以下格式:数字、数字或数字-数字。
当然,不包含逗号/破折号的数字也是有效的 - 因此它的最右边or
只是一个\d
链接到在线演示