逗号分隔的正则表达式,范围

时间:2014-11-18 17:43:54

标签: java regex

我需要为逗号分隔的数字(最多3位数)和/或以短划线分隔的范围创建正则表达式。以下字符串有效

12
12,13,14,15
12,13-15,16,100-101,120
12-13,15-20,100-200

请注意,这些数字不能超过3位数。

我需要在Java中验证字符串。任何人都可以为这些建议一个匹配的正则表达式吗?

2 个答案:

答案 0 :(得分:2)

要允许最多三位数(1到3),请使用\d{1,3}模式。

^\d{1,3}(?:-\d{1,3})?(?:,\d{1,3}(?:-\d{1,3})?)*$

Java正则表达式,

"^\\d{1,3}(?:-\\d{1,3})?(?:,\\d{1,3}(?:-\\d{1,3})?)*$"

DEMO

String s1 = "12,13-15,16,100-101,120";
String s2 = "12,13";
String s3 = "12-13,15-20,100-200";
String s4 = "12-1300,15-20,100-2000";
String s5 = "-13,15-20,100-200";
System.out.println(s1.matches("^\\d{1,3}(?:-\\d{1,3})?(?:,\\d{1,3}(?:-\\d{1,3})?)*$"));
System.out.println(s2.matches("^\\d{1,3}(?:-\\d{1,3})?(?:,\\d{1,3}(?:-\\d{1,3})?)*$"));
System.out.println(s3.matches("^\\d{1,3}(?:-\\d{1,3})?(?:,\\d{1,3}(?:-\\d{1,3})?)*$"));
System.out.println(s4.matches("^\\d{1,3}(?:-\\d{1,3})?(?:,\\d{1,3}(?:-\\d{1,3})?)*$"));
System.out.println(s5.matches("^\\d{1,3}(?:-\\d{1,3})?(?:,\\d{1,3}(?:-\\d{1,3})?)*$"));

<强>输出:

true
true
true
false
false

答案 1 :(得分:0)

由于已经有传统的方法来发布,这是另一种方式。

"^(?!.*-\\d+-)\\d{1,3}(?:[,-]\\d{1,3})*$"

 ^ 
 (?! .* - \d+ - )
 \d{1,3} 
 (?: [,-] \d{1,3} )*
 $