Ce face regexp.Regexp.ReplaceAllString
re.ReplaceAllString(src, repl) returnează o copie a lui src în care fiecare potrivire a fost înlocuită cu repl. În repl, $1, $2 … sunt înlocuite cu textul grupurilor, iar ${nume} cu grupul numit. Pentru un semn $ obișnuit scrie $$.
Atenție la numele grupurilor: $1x înseamnă grupul numit „1x” (care nu există, deci dă text gol). Scrie ${1}x. Dacă vrei ca repl să fie folosit exact, fără $ interpretat, folosește ReplaceAllLiteralString.
re.ReplaceAllStringFunc(src, repl) cheamă funcția repl pentru fiecare potrivire și pune în loc ce returnează ea. Așa poți face înlocuiri calculate: majuscule, conversii, mascări.
Parametri
| Parametru | Descriere |
|---|---|
src |
Textul inițial. |
repl |
Textul de înlocuire (cu $1, ${nume}) sau funcția care primește potrivirea și returnează înlocuirea. |
Ce returnează
Textul nou, cu înlocuirile făcute.
Exemple
Exemplul 1: Schimbarea formatului unei date
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`(\d{4})-(\d{2})-(\d{2})`)
fmt.Println(re.ReplaceAllString("Început: 2026-09-15, sfârșit: 2027-06-20", "$3.$2.$1"))
reNume := regexp.MustCompile(`(?P<an>\d{4})-(?P<luna>\d{2})`)
fmt.Println(reNume.ReplaceAllString("2026-10", "luna ${luna} din ${an}"))
fmt.Printf("%q %q\n", re.ReplaceAllString("2026-01-02", "$1x"), re.ReplaceAllString("2026-01-02", "${1}x"))
}
Rezultat
Început: 15.09.2026, sfârșit: 20.06.2027
luna 10 din 2026
"" "2026x"
Exemplul 2: Spații multiple și mascarea numerelor de telefon
package main
import (
"fmt"
"regexp"
)
func main() {
spatii := regexp.MustCompile(`\s+`)
fmt.Printf("%q\n", spatii.ReplaceAllString(" Ana are \t mere ", " "))
tel := regexp.MustCompile(`07\d{2}(\d{3})(\d{3})`)
fmt.Println(tel.ReplaceAllString("Sunați la 0721000111 sau 0744123456.", "07** *** $2"))
}
Rezultat
" Ana are mere "
Sunați la 07** *** 111 sau 07** *** 456.
Exemplul 3: ReplaceAllStringFunc: înlocuire calculată
package main
import (
"fmt"
"regexp"
"strconv"
"strings"
)
func main() {
reNumar := regexp.MustCompile(`\d+`)
dublat := reNumar.ReplaceAllStringFunc("3 mere și 12 pere", func(s string) string {
n, _ := strconv.Atoi(s)
return strconv.Itoa(n * 2)
})
fmt.Println(dublat)
reOras := regexp.MustCompile(`\b(iasi|cluj)\b`)
fmt.Println(reOras.ReplaceAllStringFunc("plecăm din iasi spre cluj", strings.ToUpper))
}
Rezultat
6 mere și 24 pere
plecăm din IASI spre CLUJ
Greșeli frecvente
- Scrii
"$1_nou"și grupul dispare: Go caută grupul numit „1_nou”. Folosește"${1}_nou". - Pui în
replun text venit de la utilizator care conține$: este interpretat ca grup. FoloseșteReplaceAllLiteralString. - Folosești o expresie regulată pentru o înlocuire de text fix.
strings.ReplaceAlleste mai simplu și mai rapid.
Comenzi înrudite
strings.ReplaceAll: Înlocuiește toate aparițiile unui text cu altul (ReplaceAll) sau doar primele n (Replace).regexp.Regexp.FindStringSubmatch: Returnează potrivirea împreună cu grupurile din paranteze; SubexpNames dă numele grupurilor (?P<nume>…).regexp.Regexp.FindString: Găsește prima potrivire (FindString), toate potrivirile (FindAllString) sau poziția primei potriviri (FindStringIndex).regexp.QuoteMeta: Pune backslash înaintea caracterelor speciale ale expresiilor regulate (. + * ? ( ) [ ] etc.), ca textul să fie căutat exact.