Ölü bir atı dövdüğüm için özür dilerim, ama hiç kimsenin buna işaret etmemesi biraz garip - "Evet yapabilirsin, ama bu gerçek hayatta grupları yakalama şeklinin tam tersi".
Regex'i kullanılması gerektiği gibi kullanırsanız, çözüm şu kadar basittir:
"6 example input 4".replaceAll("(?:\\d)(.*)(?:\\d)", "number$11");
Veya aşağıdaki shmosel'in haklı olarak işaret ettiği gibi,
"6 example input 4".replaceAll("\d(.*)\d", "number$11");
... normal ifadenizde ondalık sayıları gruplamak için iyi bir neden olmadığından.
Genellikle dizinin atmak istediğiniz kısımlarında yakalama grupları kullanmazsınız, onları dizenin tutmak istediğiniz kısmında kullanırsınız .
Değiştirmek istediğiniz grupları gerçekten istiyorsanız, muhtemelen bunun yerine bir şablon oluşturma motorudur (örn. Bıyık, ejs, StringTemplate, ...).
Meraklılar için bir kenara olarak, normal ifadelerdeki yakalamayan gruplar bile, normal ifade motorunun değişken metni tanıması ve atlaması için ihtiyaç duyduğu durum için oradadır. Örneğin,
(?:abc)*(capture me)(?:bcd)*
girişinizi ya "abcabc'ait benzeyebilir eğer onlara ihtiyaç beni yakalama bcdbcd" veya "abc beni yakalama bcd" hatta sadece "yakalama bana".
Ya da başka bir deyişle: Metin her zaman aynıysa ve onu yakalayamazsanız, grupları kullanmak için hiçbir neden yoktur.