Ce face Pattern
O expresie regulată (regex) descrie un model de text: \d+ înseamnă „una sau mai multe cifre”, [A-Z]{2} „două litere mari”. Pattern.compile(regex) verifică și transformă modelul într-un obiect Pattern, care poate fi folosit de oricâte ori.
pattern.matcher(text) creează un Matcher, obiectul care face căutarea efectivă în text: matches(), find(), group(), replaceAll(). Același Pattern poate crea matcher-e pentru multe texte.
În codul Java, backslash-ul trebuie dublat: regex-ul \d se scrie "\\d". Opțiuni ca Pattern.CASE_INSENSITIVE (fără diferență între litere mari și mici) se dau ca al doilea argument. Un model greșit aruncă PatternSyntaxException.
Parametri
| Parametru | Descriere |
|---|---|
regex |
Modelul, ca text. |
optiuni |
Opțional: Pattern.CASE_INSENSITIVE, Pattern.UNICODE_CASE, Pattern.MULTILINE, combinate cu |. |
text |
Pentru matcher: textul în care se caută. |
Ce returnează
compile: un Pattern. matcher: un Matcher.
Exemple
Exemplul 1: Un model folosit pentru mai multe texte
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Pattern numarAuto = Pattern.compile("[A-Z]{1,2} \\d{2,3} [A-Z]{3}");
String[] numere = {"IS 12 ABC", "B 123 XYZ", "is 12 abc", "CJ 1 AB"};
for (String n : numere) {
System.out.println(n + " -> " + numarAuto.matcher(n).matches());
}
}
}
Rezultat
IS 12 ABC -> true
B 123 XYZ -> true
is 12 abc -> false
CJ 1 AB -> false
Exemplul 2: Toate numerele de telefon dintr-un text
find() caută potrivirile una după alta; CASE_INSENSITIVE face ca „TEL” și „tel” să fie la fel.
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String anunt = "Vând bicicletă. Tel: 0722 111 222 sau TEL 0744-333-444, după ora 18.";
Pattern telefon = Pattern.compile("tel:?\\s*(07\\d{2}[ -]?\\d{3}[ -]?\\d{3})", Pattern.CASE_INSENSITIVE);
Matcher m = telefon.matcher(anunt);
while (m.find()) {
System.out.println("Găsit: " + m.group(1));
}
}
}
Rezultat
Găsit: 0722 111 222
Găsit: 0744-333-444
Greșeli frecvente
- Scrii
"\d"cu un singur backslash: nu compilează („illegal escape character”). În Java scrii"\\d". - Compilezi același model în fiecare iterație a unei bucle.
Pattern.compilecostă; păstreazăPattern-ul într-o constantăstatic final. - Folosești
CASE_INSENSITIVEpentru litere românești: fărăPattern.UNICODE_CASE, „Ș” și „ș” nu sunt considerate la fel.
Comenzi înrudite
Matcher: Obiectul care aplică un Pattern pe un text; matches verifică dacă tot textul se potrivește cu modelul.Pattern.matches: Verifică într-un singur apel dacă tot textul respectă o expresie regulată (fără să păstrezi Pattern-ul).Pattern.split: Împarte un text în bucăți acolo unde se potrivește modelul (ex. virgulă cu spații în jur) și returnează un tablou.Matcher.find: find caută următoarea potrivire în text; group returnează textul găsit sau doar partea dintr-un grup (paranteze).String.matches: Verifică dacă ÎNTREGUL șir se potrivește cu o expresie regulată (validare de formate).