MySQL - Espressioni Regolari
Ciao, appassionati di database in erba! Oggi ci immergeremo nel mondo affascinante delle Espressioni Regolari di MySQL. Non preoccuparti se non hai mai programmato prima - inizieremo dalle basi e man mano ci affideremo a livello avanzato. Alla fine di questo tutorial, sarai in grado di utilizzare le espressioni regolari come un professionista!
Cos'è un'Espressione Regolare?
Prima di addentrarci nei dettagli di MySQL, capiremo cos'è un'espressione regolare (regex). Immagina di cercare un modello specifico in un ampio cumulo di testo. Ecco dove la regex becomes utile! È come uno strumento di ricerca potenziato che può trovare modelli complessi nelle stringhe.
Espressioni Regolari in MySQL
In MySQL, utilizziamo l'operatore REGEXP
per lavorare con le espressioni regolari. È simile all'operatore LIKE
ma molto più potente.
Sintassi di Base
Ecco la sintassi di base:
SELECT column_name(s)
FROM table_name
WHERE column_name REGEXP 'pattern';
Analizziamo alcuni esempi:
SELECT * FROM employees WHERE last_name REGEXP 'son';
Questa query troverà tutti i dipendenti i cui cognomi contengono 'son', come Johnson, Wilson o Sonny.
Sensibilità alla Maiuscola/Minuscola
Per impostazione predefinita, le regex di MySQL non distinguono tra maiuscole e minuscole. Se desideri un confronto sensibile alle maiuscole/minuscole, utilizza la parola chiave BINARY
:
SELECT * FROM employees WHERE last_name REGEXP BINARY 'Smith';
Questo matcherà 'Smith' ma non 'smith' o 'SMITH'.
Pattern Utilizzati con REGEXP
Ora esploriamo alcuni pattern comuni utilizzati con REGEXP. Mi piace pensare a questi come il "codice segreto" della regex - una volta che li conosci, puoi trovare quasi tutto!
^ (Caret) - Inizio della Stringa
Il simbolo caret combina i modelli all'inizio di una stringa.
SELECT * FROM products WHERE product_name REGEXP '^Apple';
Questo trova tutti i prodotti i cui nomi iniziano con 'Apple', come 'Apple iPhone' o 'Apple MacBook'.
$ (Dollaro) - Fine della Stringa
Il simbolo dollaro combina i modelli alla fine di una stringa.
SELECT * FROM products WHERE product_name REGEXP 'Pro$';
Questo trova i prodotti che terminano con 'Pro', come 'MacBook Pro' o 'iPad Pro'.
. (Punto) - Qualsiasi Singolo Carattere
Il punto combina qualsiasi singolo carattere tranne il newline.
SELECT * FROM words WHERE word REGEXP 'c.t';
Questo combina parole come 'cat', 'cut' o persino 'c@t'!
* (Asterisco) - Zero o Più Occorrenze
L'asterisco combina zero o più occorrenze del carattere precedente.
SELECT * FROM emails WHERE email REGEXP 'info.*@example.com';
Questo combina email come '[email protected]', '[email protected]' o persino '[email protected]'.
+ (Più) - Una o Più Occorrenze
Simile a *, ma richiede almeno una occorrenza.
SELECT * FROM products WHERE product_name REGEXP 'iPad ?Pro+';
Questo combina 'iPad Pro', 'iPad Pro', 'iPad Pro', ecc.
? (Punto di Interrogazione) - Zero o Una Occorrenza
Il punto di interrogazione rende il carattere precedente opzionale.
SELECT * FROM words WHERE word REGEXP 'colou?r';
Questo combina sia 'color' che 'colour'.
[] (Parentesi Quadrate) - Set di Caratteri
Le parentesi quadrate definiscono un set di caratteri da combinare.
SELECT * FROM employees WHERE last_name REGEXP '[AEIOU]';
Questo trova i cognomi che contengono qualsiasi vocale.
[^] (Set di Caratteri Negato)
Aggiungere un caret all'interno delle parentesi quadrate nega il set.
SELECT * FROM products WHERE product_name REGEXP '[^0-9]';
Questo trova i nomi di prodotto che non contengono alcun numero.
| (Pipe) - Alternazione
Il simbolo pipe funziona come un operatore OR.
SELECT * FROM animals WHERE species REGEXP 'cat|dog';
Questo trova tutti i gatti e i cani nella nostra tabella degli animali.
Funzioni e Operatori di Espressione Regolare
MySQL fornisce diverse funzioni e operatori per lavorare con le espressioni regolari. Esploriamo:
Funzione/Operatore | Descrizione |
---|---|
REGEXP | Combina una stringa contro un'espressione regolare |
REGEXP_LIKE() | Restituisce 1 se la stringa combina il pattern regex, 0 altrimenti |
REGEXP_INSTR() | Restituisce l'indice di inizio della prima combinazione regex |
REGEXP_REPLACE() | Sostituisce le sottosttringhe che combinano il pattern regex |
REGEXP_SUBSTR() | Restituisce la sottosttringa che combina il pattern regex |
Analizziamo alcuni esempi:
REGEXP_LIKE()
SELECT * FROM products WHERE REGEXP_LIKE(product_name, '^iPhone');
Questo trova tutti i prodotti i cui nomi iniziano con 'iPhone'.
REGEXP_INSTR()
SELECT email, REGEXP_INSTR(email, '@') AS at_position
FROM users;
Questo restituisce la posizione del simbolo '@' in ogni indirizzo email.
REGEXP_REPLACE()
SELECT REGEXP_REPLACE('Hello, World!', '[aeiou]', '*') AS vowels_replaced;
Questo sostituisce tutte le vocali con asterischi, restituendo 'Hll, W*rld!'.
REGEXP_SUBSTR()
SELECT REGEXP_SUBSTR('[email protected]', '[^@]+') AS username;
Questo estrae la parte dell'utente di un indirizzo email.
Conclusione
Complimenti! Hai appena fatto i tuoi primi passi nel potente mondo delle espressioni regolari di MySQL. Ricorda, la pratica fa perfezione. Prova a creare le tue own regex patterns e sperimenta con diverse combinazioni.
Continuando il tuo viaggio, scoprirai che la regex è come un coltello svizzero nel tuo kit di strumenti per il database. Potrebbe sembrare un po' complicato all'inizio, ma una volta che ci prenderai la mano, ti chiederai come facevi a gestire senza di esso!
Buon codice e possa le tue query sempre restituire i risultati che cerchi!
Credits: Image by storyset