Site icon ZoomingIn

Utilizzo Espressioni Regolari per le Ricerche in MySQL

In questa nuova parte della guida su MySQL, descriveremo l’utilizzo delle espressioni regolari MySQL nella clausola WHERE per avere un controllo maggiore sul filtraggio dei dati.

Le espressioni regolari MySQL

I filtri che abbiamo presentato negli articoli precedenti, consentono di recuperare dati mediante operatori di corrispondenza, confronto e caratteri jolly e questo per dei filtri elementari possono essere sufficienti; ma con l’aumentare della complessità delle condizioni di filtraggio, tuttavia, aumenta anche la complessità delle clausole WHERE stesse.
Ed a questo punto entrano in gioco le espressioni regolari, che non sono altro che stringhe (o set di caratteri) speciali utilizzate per trovare corrispondenze di testo.

Se è necessario estrarre i numeri di cellulare da un documento di testo, si può utilizzare un’espressione regolare; se è necessario trovare tutte le parole ripetute in un testo possiamo utilizzare un’espressione regolare.

Utilizzo delle espressioni regolari MySQL

MySQL offre un supporto rudimentale alle espressioni regolari con la clausola WHERE, consentendo di specificare espressioni regolari da utilizzare per filtrare i dati recuperati mediante SELECT.
Andiamo ad illustrare il funzionamento delle espressioni regolari MySQL attraverso l’uso di alcuni esempi.

SELECT prod_nome,prod_quant
FROM prodotti
WHERE prod_quant REGEXP '200'
ORDER BY prod_nome;

L’espressione assomiglia molto a quella che abbiamo utilizzato con LIKE, con la differenza che la parola chiave LIKE è stata sostituita con REGEXP, ma allora perché utilizzare l’espressione regolare? Esaminiamo questo nuovo esempio:

SELECT prod_nome,prod_quant
FROM prodotti
WHERE prod_quant REGEXP '.00'
ORDER BY prod_nome;

In questo caso è stata utilizzata un’ espressione regolare 1. .
. è un carattere speciale delle espressioni regolari, significa “trova la corrispondenza con qualsiasi singola carattere”, quindi vengono recuperati:

Output

prod_nome prod_quant
pasta integrale
prosciutto crudo
100
200

Allora utilizzando la stessa espressione con LIKE avrebbe restituito solo il primo valore perché esegue un confronto su un’intera colonna, se il testo da confrontare si trova nel mezzo di un valore di colonna, LIKE non lo trova e la riga non viene restituita (a meno di non utilizzare i caratteri jolly).
REGEXP cerca invece corrispondenze all’interno dei valori della colonna, pertanto nel caso in cui il testo da trovare si trovi nel mezzo di un valore, REGEXP lo trova e la riga viene restituita.

Corrispondenze OR

Per cercare due stringhe (o l’uno o l’altra), utilizzare | come nell’esempio seguente:

SELECT prod_nome,prod_quant
FROM prodotti
WHERE prod_quant REGEXP '100|200'
ORDER BY prod_nome;

Corrispondenze con uno tra più caratteri

Abbiamo visto che . corrisponde a qualsiasi singolo carattere, nel caso in cui si desideri la corrispondenza solo su caratteri specifici, è possibile specificare una serie di caratteri racchiusi tra [ e ] .

Corrispondenze con intervalli di valori

Possiamo utilizzare la serie per definire uno o più caratteri da confrontare, per esempio la seguente serie corrisponde a tutti i caratteri da 0 a 9:

[0123456789]

Per semplificare questo tipo di serie è possibile utilizzare per definire un intervallo, cosi la serie precedente può essere rappresentata anche in questo modo:

[0-9]

Gli intervalli non sono limitati a serie complete, [1-4] e [7-9] sono altrettanto validi, inoltre non è necessario che gli intervalli siano numerici: [a-z] corrisponde all’intero alfabeto.

Exit mobile version