我需要为逗号分隔的数字(最多3位数)和/或以短划线分隔的范围创建正则表达式。以下字符串有效
12
12,13,14,15
12,13-15,16,100-101,120
12-13,15-20,100-200
请注意,这些数字不能超过3位数。
我需要在Java中验证字符串。任何人都可以为这些建议一个匹配的正则表达式吗?
答案 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})?)*$"
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} )*
$