REGEXP_REPLACE() în MySQL

Expresii regulate MySQL 8.0.4+

Înlocuiește bucățile de text care se potrivesc cu o expresie regulată.

Sintaxă
REGEXP_REPLACE(expresie, tipar, inlocuire[, pozitie[, aparitie[, optiuni]]])

Ce face REGEXP_REPLACE()

REGEXP_REPLACE() este varianta mai puternică a lui REPLACE(): înlocuiește tot ce se potrivește cu tiparul. Implicit înlocuiește toate aparițiile; cu parametrul aparitie poți înlocui doar a N-a apariție.

În textul de înlocuire poți folosi grupurile din tipar: $1, $2 etc.

Parametri

Parametru Descriere
expresie Textul original.
tipar Expresia regulată.
inlocuire Textul pus în loc (poate conține $1, $2…).
pozitie Opțional. De unde începe căutarea (implicit 1).
aparitie Opțional. Care apariție se înlocuiește (implicit 0 = toate).
optiuni Opțional. Ca la REGEXP_LIKE().

Ce returnează

Textul nou.

Exemple

Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.

CREATE TABLE clienti (
  id INT PRIMARY KEY,
  nume VARCHAR(50),
  oras VARCHAR(30),
  email VARCHAR(100),
  telefon VARCHAR(20)
);

INSERT INTO clienti VALUES
  (1, 'Ana Pop', 'Iași', 'ana.pop@exemplu.ro', '0722-123-456'),
  (2, 'bogdan ionescu', 'Cluj-Napoca', 'bogdan@firma.ro', '0744 555 101'),
  (3, 'Cristina Marin', 'Brașov', 'cristina@exemplu.ro', '0733.222.909'),
  (4, 'Dan Stoica', 'Timișoara', NULL, '0755123123');

Exemplul 1: Numere de telefon doar cu cifre

SELECT telefon, REGEXP_REPLACE(telefon, '[^0-9]', '') AS doar_cifre
FROM clienti
ORDER BY id;

Rezultat

+--------------+------------+
| telefon      | doar_cifre |
+--------------+------------+
| 0722-123-456 | 0722123456 |
| 0744 555 101 | 0744555101 |
| 0733.222.909 | 0733222909 |
| 0755123123   | 0755123123 |
+--------------+------------+

Exemplul 2: Reordonarea cu grupuri

SELECT REGEXP_REPLACE('19.10.2026', '([0-9]{2})\\.([0-9]{2})\\.([0-9]{4})', '$3-$2-$1') AS data_iso;

Rezultat

+------------+
| data_iso   |
+------------+
| 2026-10-19 |
+------------+

Greșeli frecvente

  • Uiți că în SQL backslash-ul trebuie dublat: punctul literal se scrie '\\.' în tipar, nu '\.'.

Comenzi înrudite

  • REPLACE(): Înlocuiește toate aparițiile unui text cu alt text.
  • REGEXP_SUBSTR(): Returnează bucata de text care se potrivește cu o expresie regulată.
  • REGEXP / RLIKE: Verifică dacă un text se potrivește cu o expresie regulată; mai puternic decât LIKE.