Ce face regexp.QuoteMeta
Caractere ca ., +, *, ?, (, ), [, ], {, }, ^, $, | și \ au sens special într-o expresie regulată: punctul înseamnă „orice caracter”. regexp.QuoteMeta(s) pune un backslash înaintea fiecăruia, astfel încât textul să se potrivească doar cu el însuși.
Folosește-o când construiești o expresie dintr-un text venit de la utilizator (un cuvânt căutat, un nume de fișier), ca să nu fie interpretat ca tipar.
Parametri
| Parametru | Descriere |
|---|---|
s |
Textul care trebuie căutat exact. |
Ce returnează
Textul cu caracterele speciale precedate de backslash.
Exemple
Exemplul 1: Căutarea exactă a unui text cu puncte
Fără QuoteMeta, punctul din „1.5” se potrivește cu orice caracter, deci și „105” este găsit.
package main
import (
"fmt"
"regexp"
)
func main() {
cautat := "1.5"
fmt.Println(regexp.QuoteMeta(cautat))
text := "Prețuri: 105 lei, 1.5 lei"
gresit := regexp.MustCompile(cautat)
corect := regexp.MustCompile(regexp.QuoteMeta(cautat))
fmt.Printf("%q\n", gresit.FindAllString(text, -1))
fmt.Printf("%q\n", corect.FindAllString(text, -1))
}
Rezultat
1\.5
["105" "1.5"]
["1.5"]
Exemplul 2: Cuvânt căutat de utilizator, fără litere mari
package main
import (
"fmt"
"regexp"
)
func main() {
cautare := "C++ (avansat)"
re := regexp.MustCompile(`(?i)` + regexp.QuoteMeta(cautare))
fmt.Println(re.String())
fmt.Println(re.MatchString("Curs de c++ (Avansat) la Iași"))
}
Rezultat
(?i)C\+\+ \(avansat\)
true
Greșeli frecvente
- Pui un text de la utilizator direct în
regexp.MustCompile: un simplu „(” oprește programul cupanic, iar „.” găsește potriviri greșite. Trece-l întâi prinQuoteMeta.
Comenzi înrudite
regexp.MatchString: Verifică dintr-un singur apel dacă un text (string, []byte sau un RuneReader) se potrivește cu o expresie regulată.regexp.Regexp: O expresie regulată compilată: o creezi o dată cu Compile sau MustCompile și o folosești de oricâte ori (MatchString, Find…, Replace…).strings.Contains: Verifică dacă un text conține un alt text, unul dintre niște caractere, un caracter anume sau un caracter care respectă o condiție.