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!

MySQL - Regular Expressions

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