Ce face Pattern.quote
În regex, caractere ca ., *, +, ?, |, (, $ au sens special. Pattern.quote(text) returnează un model care caută textul literal, caracter cu caracter, adăugând marcajele \Q și \E în jurul lui.
Este important când modelul vine de la utilizator sau din date: căutarea lui „1.5” fără quote s-ar potrivi și cu „125”. Pentru textul de înlocuire din replaceAll, unde $ și \ sunt speciale, folosește Matcher.quoteReplacement.
Parametri
| Parametru | Descriere |
|---|---|
text |
Textul care trebuie căutat exact. |
Ce returnează
Un String folosit ca model regex.
Exemple
Exemplul 1: Punctul ca separator
split(".") dă un tablou gol: în regex punctul înseamnă „orice caracter”, deci fiecare caracter devine separator. Cu Pattern.quote punctul este căutat ca atare.
import java.util.Arrays;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String ip = "192.168.1.10";
System.out.println(Arrays.toString(ip.split(".")));
System.out.println(Arrays.toString(ip.split(Pattern.quote("."))));
System.out.println(Pattern.quote("."));
}
}
Rezultat
[]
[192, 168, 1, 10]
\Q.\E
Exemplul 2: Căutarea unui text scris de utilizator
Utilizatorul caută „1.5”. Fără quote, punctul înseamnă „orice caracter”, deci se potrivește și cu „125”. La înlocuire, quoteReplacement păstrează semnul $.
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String text = "Ulei 1.5 l costă 12 lei; pachet 125 g.";
String cautat = "1.5";
System.out.println(Pattern.compile(cautat).matcher(text).results().map(r -> r.group()).toList());
System.out.println(Pattern.compile(Pattern.quote(cautat)).matcher(text).results().map(r -> r.group()).toList());
String inlocuire = "$1.5";
System.out.println(text.replaceAll(Pattern.quote(cautat), Matcher.quoteReplacement(inlocuire)));
}
}
Rezultat
[1.5, 125]
[1.5]
Ulei $1.5 l costă 12 lei; pachet 125 g.
Greșeli frecvente
- Construiești un model din textul utilizatorului fără
quote. Un text ca(aruncăPatternSyntaxException, iar.*se potrivește cu orice. - Folosești
Pattern.quotepentru textul de înlocuire. Acolo trebuieMatcher.quoteReplacement.
Comenzi înrudite
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.Pattern: O expresie regulată compilată; compile o pregătește o dată, matcher o aplică pe un text ca să cauți potriviri.Matcher.replaceAll: Înlocuiește toate potrivirile din text; în înlocuire $1 reprezintă grupul 1, iar varianta cu funcție calculează textul nou.String.replace: Înlocuiește toate aparițiile unui caracter sau ale unui text cu altul; textul este căutat literal.