Ce face regexp.Regexp.FindString
re.FindString(s) returnează textul primei potriviri sau textul gol dacă nu există niciuna. Pentru că o potrivire poate fi chiar textul gol, folosește FindStringIndex sau MatchString când trebuie să faci diferența.
re.FindAllString(s, n) returnează toate potrivirile care nu se suprapun, în ordine. n limitează numărul lor; -1 înseamnă toate. Dacă nu există potriviri, rezultatul este nil.
re.FindStringIndex(s) returnează pozițiile [început, sfârșit] ale primei potriviri, în octeți, astfel încât s[loc[0]:loc[1]] este textul găsit. Dacă nu există potrivire, returnează nil.
Parametri
| Parametru | Descriere |
|---|---|
s |
Textul în care se caută. |
n |
La FindAllString: numărul maxim de potriviri (-1 = toate). |
Ce returnează
FindString: textul găsit sau "". FindAllString: []string sau nil. FindStringIndex: []int cu două poziții sau nil.
Exemple
Exemplul 1: Prețuri dintr-un text
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`\d+(,\d+)? lei`)
text := "Pâinea costă 4,50 lei, laptele 7 lei, iar cafeaua 32,90 lei."
fmt.Println(re.FindString(text))
fmt.Printf("%q\n", re.FindAllString(text, -1))
fmt.Printf("%q\n", re.FindAllString(text, 2))
fmt.Println("fără potriviri, nil:", re.FindAllString("fără prețuri", -1) == nil)
}
Rezultat
4,50 lei
["4,50 lei" "7 lei" "32,90 lei"]
["4,50 lei" "7 lei"]
fără potriviri, nil: true
Exemplul 2: Poziția potrivirii
Pozițiile sunt în octeți: „Născut în Iași, în ” are 19 caractere, dar 23 de octeți. Când nu există potrivire, rezultatul este nil, pe care Println îl afișează ca [].
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`\d{4}`)
s := "Născut în Iași, în 2001."
loc := re.FindStringIndex(s)
fmt.Println(loc)
fmt.Println("an:", s[loc[0]:loc[1]], "| înainte:", s[:loc[0]])
fmt.Println(re.FindStringIndex("fără an"))
}
Rezultat
[23 27]
an: 2001 | înainte: Născut în Iași, în
[]
Exemplul 3: Cuvintele românești dintr-un text
package main
import (
"fmt"
"regexp"
)
func main() {
text := "Știința și arta, în Țara Românească."
fmt.Printf("%q\n", regexp.MustCompile(`\w+`).FindAllString(text, -1))
fmt.Printf("%q\n", regexp.MustCompile(`\p{L}+`).FindAllString(text, -1))
}
Rezultat
["tiin" "a" "i" "arta" "n" "ara" "Rom" "neasc"]
["Știința" "și" "arta" "în" "Țara" "Românească"]
Greșeli frecvente
- Verifici
FindString(s) != ""ca să afli dacă există potrivire. Pentru expresii care se pot potrivi cu textul gol (de exemplua*) rezultatul este greșit; foloseșteMatchStringsauFindStringIndex. - Folosești pozițiile din
FindStringIndexca numere de caractere: sunt octeți.
Comenzi înrudite
regexp.Regexp.FindStringSubmatch: Returnează potrivirea împreună cu grupurile din paranteze; SubexpNames dă numele grupurilor (?P<nume>…).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…).regexp.Regexp.ReplaceAllString: Înlocuiește toate potrivirile cu un text (care poate folosi grupurile $1, ${nume}) sau cu rezultatul unei funcții.strings.Index: Returnează poziția (în octeți) a primei sau ultimei apariții a unui text, octet sau caracter; -1 dacă nu există.