Rất tiếc khi đánh chết một con ngựa, nhưng thật kỳ lạ là không ai chỉ ra điều này - "Có bạn có thể, nhưng điều này ngược lại với cách bạn sử dụng các nhóm bắt trong cuộc sống thực".
Nếu bạn sử dụng Regex theo cách nó được sử dụng, thì giải pháp đơn giản như sau:
"6 example input 4".replaceAll("(?:\\d)(.*)(?:\\d)", "number$11");
Hoặc như được chỉ ra một cách đúng đắn bởi shmosel bên dưới,
"6 example input 4".replaceAll("\d(.*)\d", "number$11");
... vì trong regex của bạn, không có lý do chính đáng nào để nhóm các số thập phân cả.
Bạn không thường sử dụng các nhóm thu thập trên các phần của chuỗi mà bạn muốn loại bỏ , bạn sử dụng chúng trên phần của chuỗi mà bạn muốn giữ lại .
Nếu bạn thực sự muốn các nhóm mà bạn muốn thay thế, những gì bạn có thể muốn thay thế là một công cụ tạo khuôn mẫu (ví dụ: ria mép, ejs, StringTemplate, ...).
Để dành cho những nhóm tò mò, ngay cả những nhóm không nắm bắt trong regexes cũng chỉ ở đó cho trường hợp công cụ regex cần họ nhận ra và bỏ qua văn bản biến đổi. Ví dụ, trong
(?:abc)*(capture me)(?:bcd)*
bạn cần chúng nếu thông tin đầu vào của bạn có thể giống như "abcabc bắt tôi bcdbcd" hoặc "abc bắt tôi bcd" hoặc thậm chí chỉ "chụp tôi".
Hay nói theo cách khác: nếu văn bản luôn giống nhau và bạn không nắm bắt được nó, thì không có lý do gì để sử dụng nhóm cả.