Eigentlich finde ich es schade, dass es etwas untergegangen ist, dass das Pattern "(-?\\d+),(-?\\d+)" möglicherweise suboptimal ist.
Nicht, dass man mich missversteht: Man kann diese Pattern alle gerne diskutieren. Gegen eine sachliche Diskussion spricht absolut nichts, vor allem falls der TE noch etwas mehr Kontext gibt.
Mir gehen auch einige Punkte bezüglich RegEx durch den Kopf, die ich gerne beachte und so. Aber ohne Kontext wäre das dann mehr ein schreiben eines Best Practice oder so. Daher habe ich mir das erspart.
Aber es sind ja ein paar Punkte angesprochen worden im Thread und wenn es da Bedarf gibt, dazu etwas zu schreiben, dann gerne. Ich habe jetzt den Thread nicht erneut im Detail geprüft, aber ich habe folgende Punkte im Kopf:
a) Umsetzung der Anforderungen: Wenn ein int gefordert ist, dann kann man das, was da genommen werden kann, durchaus weiter eingrenzen: die Länge, also etwas wie ein {1,10} statt einem + - aber man muss die Konsequenzen bedenken: Es müssen die Grenzen klar betrachtet werden, also es muss sicher gestellt sein, dass davor und danach keine weiteren Ziffern kommen (nicht dass es 11 Ziffern gibt und nur einfach 10 genommen werden und eins ignoriert wird).
b) exakte RegEx - keine zusätzliche nachfolgende Validierung. Das sehe ich nicht so. Beispiel: Ein RegEx für ein int ist einfach viel zu komplex - ein Bereich von -2147483648 bis 2147483647 wäre ein RegEx wie:
^-?(?:214748364[0-7]|21474836[0-9]|2147483[0-5][0-9]|214748[0-2][0-9]{2}|21474[0-7][0-9]{3}|2147[0-3][0-9]{4}|214[0-6][0-9]{5}|21[0-3][0-9]{6}|20[0-9]{7}|[1-9][0-9]{0,8}|0)$
Wenn ich mir nun einen regulären Ausdruck vorstelle, der womöglich in einem Ausdruck mehrere matches haben möchte, dann habe ich letzten Endes einen riesigen String, den man kaum noch überblicken kann ... Dann lieber deutlich kürzer halten und dann die einzelnen Gruppen-Ergebnisse noch einmal separat validieren. Das hält den Code deutlich lesbarer. Ich hatte sogar einmal ein Projekt, da habe ich dann reguläre Ausdrücke dynamisch gebaut. Das war dann eine Klasse, die dann stark vereinfach ${key} mit einem RegEx ersetzt hatte. So konnte man dann letzten Endes übersichtliche reguläre Ausdrücke haben wie ^${int}
${ipv4}${ipv6}$ (Die Klasse konnte etwas mehr ... Es konnte auch eine Validierungsmethode gesetzt werden, hat Gruppen gesetzt und ausgewertet, diverse Schnittstellen angeboten (Streams API) und all sowas ... Da konnte man relativ schön einen IO Stream auslesen und Zeilenweise auswerten lassen ... und das mit sehr gut lesbaren JavaCode und die Pattern waren kurz und übersichtlich und Unit getestet (wir hatten projektspezifische Formate).
Aber - wenn ich mir die Fragestellung ansehe, dann war das alles nicht Thema des TE ..