Przepraszam, że biłem martwego konia, ale to trochę dziwne, że nikt tego nie zauważył - „Tak, możesz, ale to jest przeciwieństwo tego, jak używasz chwytania grup w prawdziwym życiu”.
Jeśli używasz Regex w sposób, w jaki ma być używany, rozwiązanie jest tak proste:
"6 example input 4".replaceAll("(?:\\d)(.*)(?:\\d)", "number$11");
Lub jak słusznie wskazano w shmosel poniżej,
"6 example input 4".replaceAll("\d(.*)\d", "number$11");
... ponieważ w Twoim wyrażeniu regularnym nie ma żadnego powodu, aby grupować ułamki dziesiętne.
Zwykle nie używasz grup przechwytywania na częściach łańcucha, które chcesz odrzucić , używasz ich na części łańcucha, którą chcesz zachować .
Jeśli naprawdę potrzebujesz grup, które chcesz zastąpić, prawdopodobnie zamiast tego potrzebujesz silnika szablonów (np. Wąsy, ejs, StringTemplate, ...).
Na marginesie dla ciekawskich, nawet nieprzechwytywane grupy w wyrażeniach regularnych są dostępne tylko na wypadek, gdyby silnik wyrażeń regularnych wymagał od nich rozpoznawania i pomijania tekstu zmiennego. Na przykład w
(?:abc)*(capture me)(?:bcd)*
potrzebujesz ich, jeśli dane wejściowe mogą wyglądać na „ abcabc złap mnie bcdbcd” lub „abc capture me bcd” lub po prostu „capture me”.
Albo odwrotnie: jeśli tekst jest zawsze taki sam, a go nie przechwytujesz, nie ma żadnego powodu, aby używać grup.