Ce face regexp_replace
regexp_replace caută în text modelul (o expresie regulată POSIX) și îl înlocuiește. Implicit înlocuiește doar prima potrivire; flagul 'g' (global) le înlocuiește pe toate, iar 'i' ignoră diferența dintre litere mari și mici.
În textul de înlocuire, \1, \2 etc. înseamnă grupurile din paranteze, iar \& întreaga potrivire.
Din PostgreSQL 15 există și regexp_count, regexp_like, regexp_substr și regexp_instr, iar regexp_replace poate înlocui doar a N-a potrivire.
Parametri
| Parametru | Descriere |
|---|---|
text |
Textul prelucrat. |
model |
Expresia regulată, de exemplu '\s+'. |
inlocuire |
Textul nou; poate conține \1…\9. |
flaguri |
'g' = toate potrivirile, 'i' = fără diferență de majuscule. |
Ce returnează
Textul după înlocuire (text).
Exemple
Exemplul 1: Curățarea numerelor de telefon
SELECT telefon, regexp_replace(telefon, '\D', '', 'g') AS doar_cifre
FROM clienti;
Rezultat în psql
telefon | doar_cifre
-----------------+-------------
0722 123 456 | 0722123456
(0232) 21-45-67 | 0232214567
+40 745.111.222 | 40745111222
(3 rows)
Exemplul 2: Fără ‘g’ se înlocuiește doar prima potrivire
SELECT regexp_replace('Ana are mere', '\s+', ' ') AS prima,
regexp_replace('Ana are mere', '\s+', ' ', 'g') AS toate;
Rezultat în psql
prima | toate
-----------------+--------------
Ana are mere | Ana are mere
(1 row)
Exemplul 3: Grupuri: data din format ISO în format românesc
SELECT regexp_replace('2026-10-25', '(\d{4})-(\d{2})-(\d{2})', '\3.\2.\1') AS data_ro;
Rezultat în psql
data_ro
------------
25.10.2026
(1 row)
Greșeli frecvente
- Uiți flagul
'g'și se înlocuiește doar prima apariție. - Folosești
regexp_replacepentru un text fix:replace(text, 'vechi', 'nou')este mai simplu și nu interpretează caractere speciale ca.sau(.
Comenzi înrudite
split_part și string_to_array: split_part returnează bucata n dintr-un text împărțit după separator; string_to_array returnează toate bucățile ca tablou.format: Construiește un text dintr-un șablon cu %s, %I și %L. Este modul sigur de a crea SQL dinamic în PL/pgSQL.