Ce face REGEXP / RLIKE
REGEXP returnează 1 dacă textul se potrivește cu tiparul și 0 dacă nu. RLIKE este sinonim, iar NOT REGEXP inversează rezultatul.
Spre deosebire de LIKE, tiparul se poate potrivi oriunde în text, nu trebuie să acopere tot textul. Folosește ^ pentru început și $ pentru sfârșit. Cu colația implicită, nu face diferența între litere mari și mici.
Parametri
| Parametru | Descriere |
|---|---|
expresie |
Textul verificat. |
tipar |
Expresia regulată (sintaxă ICU), ex. '^07[0-9]{8}$'. |
Ce returnează
1, 0 sau NULL.
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 scrise corect
SELECT nume, telefon,
telefon REGEXP '^07[0-9]{8}$' AS format_corect
FROM clienti
ORDER BY id;
Rezultat
+----------------+--------------+---------------+
| nume | telefon | format_corect |
+----------------+--------------+---------------+
| Ana Pop | 0722-123-456 | 0 |
| bogdan ionescu | 0744 555 101 | 0 |
| Cristina Marin | 0733.222.909 | 0 |
| Dan Stoica | 0755123123 | 1 |
+----------------+--------------+---------------+
Exemplul 2: RLIKE și NOT REGEXP
SELECT nume FROM clienti WHERE oras RLIKE '^(Iași|Brașov)$'
UNION ALL
SELECT CONCAT('fără cratimă: ', nume) FROM clienti WHERE oras NOT REGEXP '-';
Rezultat
+---------------------------------+
| nume |
+---------------------------------+
| Ana Pop |
| Cristina Marin |
| fără cratimă: Ana Pop |
| fără cratimă: Cristina Marin |
| fără cratimă: Dan Stoica |
+---------------------------------+
Greșeli frecvente
- Uiți de
^și$.telefon REGEXP '[0-9]{10}'acceptă și texte cu alte caractere înainte sau după cele 10 cifre. - Folosești
REGEXPpe tabele mari înWHERE. Nu poate folosi indexuri, deci scanează toate rândurile.
Comenzi înrudite
REGEXP_LIKE(): Ca operatorul REGEXP, dar ca funcție, cu opțiuni (ex. diferența dintre majuscule).REGEXP_REPLACE(): Înlocuiește bucățile de text care se potrivesc cu o expresie regulată.LIKE: Caută texte după un model: începe cu, se termină cu, conține.