Es tut mir leid, ein totes Pferd geschlagen zu haben, aber es ist irgendwie seltsam, dass niemand darauf hingewiesen hat - "Ja, das kannst du, aber das ist das Gegenteil davon, wie du Gruppen im wirklichen Leben fängst".
Wenn Sie Regex so verwenden, wie es verwendet werden soll, ist die Lösung so einfach:
"6 example input 4".replaceAll("(?:\\d)(.*)(?:\\d)", "number$11");
Oder wie von Shmosel unten zu Recht hervorgehoben,
"6 example input 4".replaceAll("\d(.*)\d", "number$11");
... da es in Ihrer Regex keinen guten Grund gibt, die Dezimalstellen überhaupt zu gruppieren.
Normalerweise verwenden Sie keine Erfassungsgruppen für die Teile der Zeichenfolge, die Sie verwerfen möchten . Sie verwenden sie für den Teil der Zeichenfolge, den Sie behalten möchten .
Wenn Sie wirklich Gruppen möchten, die Sie ersetzen möchten, möchten Sie wahrscheinlich stattdessen eine Vorlagen-Engine (z. B. Schnurrbart, EJS, StringTemplate, ...).
Abgesehen von den neugierigen, auch nicht erfassenden Gruppen in regulären Ausdrücken sind sie nur für den Fall da, dass die Regex-Engine sie benötigt, um variablen Text zu erkennen und zu überspringen. Zum Beispiel in
(?:abc)*(capture me)(?:bcd)*
Sie benötigen sie, wenn Ihre Eingabe entweder wie "abcabc capture me bcdbcd" oder "abc capture me bcd" oder einfach nur "Capture me" aussehen kann .
Oder anders ausgedrückt: Wenn der Text immer derselbe ist und Sie ihn nicht erfassen, gibt es keinen Grund, überhaupt Gruppen zu verwenden.