为了使其更具可读性,您的正则表达式可以写成
String numRegex = "(-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+";
String regex = "\\{\\s*(" + numRegex + "(\\s*,\\s*" + numRegex + ")*\\s*)?\\}";
虽然我确实认为numRegex 部分不正确,因为它允许使用诸如1/2-3.4/5-6/7 之类的文本
现在您想将其包装在 { xxx , xxx , ... } 构造中,所以
String regex2 = "\\{\\s*(" + regex + "(\\s*,\\s*" + regex + ")*\\s*)?\\}";
测试
System.out.println("{{1.2, 3,4},{2,3.4,3}}".matches(regex2));
System.out.println("{{1.2, 3,4},{2,3.4,3},}".matches(regex2));
输出
true
false
作为一个单一的长正则表达式
"\\{\\s*(\\{\\s*((-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+(\\s*,\\s*(-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+)*\\s*)?\\}(\\s*,\\s*\\{\\s*((-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+(\\s*,\\s*(-?\\b\\d+(?:\\.\\d+)?(?:/\\d+(?:\\.\\d+)?)?\\b)+)*\\s*)?\\})*\\s*)?\\}"
但如果你可以像上面那样拆分和构建它,它会更容易阅读。