Чтобы сделать его более читабельным, ваше регулярное выражение можно записать как
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*)?\\}"
, но его будет намного проще читать, если вы сможете разбить и построить его, как указано выше.