Matcher.replaceAll în Java

Expresii regulate (Pattern și Matcher) Java 1.4 (cu funcție: Java 9)

Înlocuiește toate potrivirile din text; în înlocuire $1 reprezintă grupul 1, iar varianta cu funcție calculează textul nou.

Sintaxă
String replaceAll(String inlocuire)
String replaceAll(Function<MatchResult, String> f)
String replaceFirst(String inlocuire)

Ce face Matcher.replaceAll

m.replaceAll(inlocuire) returnează un text nou în care fiecare potrivire a modelului este înlocuită. În textul de înlocuire, $1, $2 sau ${nume} introduc grupurile găsite, deci poți rearanja bucăți: din „2026-10-19” obții „19.10.2026”.

Din Java 9 există și varianta care primește o funcție: pentru fiecare potrivire primești un MatchResult și returnezi textul nou. Așa poți face calcule, de exemplu să transformi prețurile din euro în lei. replaceFirst înlocuiește doar prima potrivire.

$ și \ sunt speciale în înlocuire; pentru un text literal folosește Matcher.quoteReplacement. String.replaceAll(regex, inlocuire) este scurtătura pentru același lucru.

Parametri

Parametru Descriere
inlocuire Textul nou, cu $n pentru grupuri.
f Funcția care primește potrivirea și returnează înlocuirea.

Ce returnează

Un String nou; textul original nu se schimbă.

Exemple

Exemplul 1: Rearanjarea datelor cu grupuri

import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        String text = "Plecare: 2026-07-01, întoarcere: 2026-07-14.";
        Pattern iso = Pattern.compile("(\\d{4})-(\\d{2})-(\\d{2})");

        System.out.println(iso.matcher(text).replaceAll("$3.$2.$1"));
        System.out.println(iso.matcher(text).replaceFirst("[dată ascunsă]"));
    }
}

Rezultat

Plecare: 01.07.2026, întoarcere: 14.07.2026.
Plecare: [dată ascunsă], întoarcere: 2026-07-14.

Exemplul 2: Înlocuire calculată: prețuri în lei

Funcția primește fiecare preț în euro, îl înmulțește cu cursul și returnează textul nou.

import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        String meniu = "Pizza 8 EUR, Paste 10 EUR, Desert 4 EUR";
        double curs = 4.97;

        String inLei = Pattern.compile("(\\d+) EUR").matcher(meniu)
                .replaceAll(r -> String.format("%.2f lei", Integer.parseInt(r.group(1)) * curs));
        System.out.println(inLei);
    }
}

Rezultat

Pizza 39.76 lei, Paste 49.70 lei, Desert 19.88 lei

Exemplul 3: Ascunderea cifrelor unui număr de telefon

import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        String mesaj = "Sunați-mă la 0722123456 sau 0744987654.";
        String ascuns = Pattern.compile("(07\\d)\\d{4}(\\d{3})").matcher(mesaj).replaceAll("$1****$2");
        System.out.println(ascuns);
    }
}

Rezultat

Sunați-mă la 072****456 sau 074****654.

Greșeli frecvente

  • Pui un $ literal în înlocuire (de exemplu „$5”): primești IllegalArgumentException sau un grup greșit. Scrie \\$ sau folosește Matcher.quoteReplacement.
  • Te aștepți ca textul original să se schimbe. replaceAll returnează un text nou.

Comenzi înrudite

  • Matcher.find: find caută următoarea potrivire în text; group returnează textul găsit sau doar partea dintr-un grup (paranteze).
  • Pattern.quote: Transformă un text într-un model care se potrivește exact cu el, chiar dacă are caractere speciale (. * + ? |).
  • String.replaceAll: Înlocuiește toate (replaceAll) sau doar prima (replaceFirst) potrivire a unei expresii regulate.
  • Matcher.results: Returnează toate potrivirile ca Stream<MatchResult>, ca să le prelucrezi cu map, filter, toList în loc de o buclă cu find.