我需要为逗号分隔的数字(最多 3 位)和/或用破折号分隔的范围创建正则表达式。以下字符串有效
12
12,13,14,15
12,13-15,16,100-101,120
12-13,15-20,100-200
请注意,数字不能超过 3 位。
我需要一个来验证Java中的字符串。任何人都可以为这些建议一个匹配的正则表达式吗?
最佳答案
要允许最多三位数字(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
关于java - 逗号分隔的正则表达式,范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27000599/