Matcher în Java

Obiectul care aplică un Pattern pe un text; matches verifică dacă tot textul se potrivește cu modelul.

Sintaxă
import java.util.regex.Matcher;

Matcher m = pattern.matcher(text);
boolean matches()
boolean lookingAt()

Ce face Matcher

Un Matcher se obține din pattern.matcher(text) și ține minte poziția în text și ultima potrivire. Cu el verifici (matches), cauți (find), extragi părți (group, start, end) și înlocuiești (replaceAll).

matches() returnează true doar dacă tot textul respectă modelul. lookingAt() cere potrivirea doar la început. După un matches() reușit, poți citi grupurile din paranteze cu group(n).

Un Matcher nu este sigur pentru mai multe fire de execuție. Pattern-ul se poate împărți, dar fiecare fir își creează propriul Matcher.

Ce returnează

matches și lookingAt returnează boolean.

Exemple

Exemplul 1: Validarea unei date și citirea părților ei

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        Pattern data = Pattern.compile("(\\d{2})\\.(\\d{2})\\.(\\d{4})");

        for (String text : new String[]{"01.12.2026", "1.12.2026", "01.12.2026 ora 10"}) {
            Matcher m = data.matcher(text);
            if (m.matches()) {
                System.out.println(text + ": zi " + m.group(1) + ", lună " + m.group(2) + ", an " + m.group(3));
            } else {
                System.out.println(text + ": format greșit");
            }
        }
    }
}

Rezultat

01.12.2026: zi 01, lună 12, an 2026
1.12.2026: format greșit
01.12.2026 ora 10: format greșit

Exemplul 2: matches față de lookingAt

Textul începe cu un cod de județ, dar continuă. lookingAt acceptă, matches nu.

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        Matcher m = Pattern.compile("[A-Z]{2}").matcher("IS-12-ABC");
        System.out.println("matches: " + m.matches());
        System.out.println("lookingAt: " + m.lookingAt());
        System.out.println("găsit: " + m.group());
    }
}

Rezultat

matches: false
lookingAt: true
găsit: IS

Greșeli frecvente

  • Apelezi group() înainte de matches()/find() sau după un rezultat false: IllegalStateException: No match found.
  • Folosești matches() ca să afli dacă textul conține modelul. Pentru asta e find().

Comenzi înrudite

  • Pattern: O expresie regulată compilată; compile o pregătește o dată, matcher o aplică pe un text ca să cauți potriviri.
  • Matcher.find: find caută următoarea potrivire în text; group returnează textul găsit sau doar partea dintr-un grup (paranteze).
  • Matcher.start: start dă poziția unde începe ultima potrivire, iar end poziția imediat după ea (ca la substring).
  • Matcher.replaceAll: Înlocuiește toate potrivirile din text; în înlocuire $1 reprezintă grupul 1, iar varianta cu funcție calculează textul nou.
  • Matcher.results: Returnează toate potrivirile ca Stream<MatchResult>, ca să le prelucrezi cu map, filter, toList în loc de o buclă cu find.