MySQL ha una serie di funzioni e operatori che ci consentono di eseguire operazioni utilizzando espressioni regolari (regex). Questo articolo presenta due operatori e una funzione che ci consentono di scoprire se una stringa corrisponde a un'espressione regolare specificata da un determinato modello.
Queste funzioni e operatori regex sono:
REGEXP_LIKE()
REGEXP
RLIKE
Questi sono tutti sostanzialmente equivalenti, in quanto gli operatori (i secondi due) sono entrambi sinonimi della funzione (il primo). In ogni caso, puoi vedere esempi di tutti e tre in azione di seguito.
Il REGEXP_LIKE()
Funzione
Per prima cosa, diamo un'occhiata alla funzione. Ecco un esempio di esecuzione di una ricerca regex utilizzando REGEXP_LIKE()
funzione:
SELECT REGEXP_LIKE('Car', '^C') AS 'Match', REGEXP_LIKE('Bar', '^C') AS 'No Match';
Risultato:
+-------+----------+ | Match | No Match | +-------+----------+ | 1 | 0 | +-------+----------+
La prima stringa corrisponde (perché inizia con C ) quindi il risultato è 1
. La seconda stringa non corrisponde e quindi il risultato è 0
.
Tuttavia, questa funzione può essere molto più utile della semplice restituzione di un 1
o 0
. Ad esempio, può essere aggiunto a WHERE
clausola quando si interroga un database. In questo caso, possiamo ottenere un elenco di righe che contengono una corrispondenza per il modello.
Ecco un esempio:
SELECT AlbumId, AlbumName FROM Albums WHERE REGEXP_LIKE(AlbumName, '^Power');
Risultato:
+---------+------------+ | AlbumId | AlbumName | +---------+------------+ | 1 | Powerslave | | 2 | Powerage | +---------+------------+
Ecco la tabella completa:
SELECT AlbumId, AlbumName FROM Albums;
Risultato:
+---------+--------------------------+ | AlbumId | AlbumName | +---------+--------------------------+ | 1 | Powerslave | | 2 | Powerage | | 3 | Singing Down the Lane | | 4 | Ziltoid the Omniscient | | 5 | Casualties of Cool | | 6 | Epicloud | | 7 | Somewhere in Time | | 8 | Piece of Mind | | 9 | Killers | | 10 | No Prayer for the Dying | | 11 | No Sound Without Silence | | 12 | Big Swing Face | | 13 | Blue Night | | 14 | Eternity | | 15 | Scandinavia | | 16 | Long Lost Suitcase | | 17 | Praise and Blame | | 18 | Along Came Jones | | 19 | All Night Wrong | | 20 | The Sixteen Men of Tain | +---------+--------------------------+
Il REGEXP
Operatore
Ecco come fare la stessa cosa usando REGEXP
operatore:
SELECT 'Car' REGEXP '^C' AS 'Match', 'Bar' REGEXP '^C' AS 'No Match';
Risultato:
+-------+----------+ | Match | No Match | +-------+----------+ | 1 | 0 | +-------+----------+
E l'esempio del database:
SELECT AlbumId, AlbumName FROM Albums WHERE AlbumName REGEXP '^Power';
Risultato:
+---------+------------+ | AlbumId | AlbumName | +---------+------------+ | 1 | Powerslave | | 2 | Powerage | +---------+------------+
Puoi anche usare NOT REGEXP
per restituire il risultato opposto.
Il RLIKE
Operatore
E qui sta usando RLIKE
:
SELECT 'Car' RLIKE '^C' AS 'Match', 'Bar' RLIKE '^C' AS 'No Match';
Risultato:
+-------+----------+ | Match | No Match | +-------+----------+ | 1 | 0 | +-------+----------+
E l'esempio del database:
SELECT AlbumId, AlbumName FROM Albums WHERE AlbumName RLIKE '^Power';
Risultato:
+---------+------------+ | AlbumId | AlbumName | +---------+------------+ | 1 | Powerslave | | 2 | Powerage | +---------+------------+
In questo caso ho semplicemente scambiato REGEXP
per RLIKE
e ho lasciato il resto del codice da solo.
Puoi anche usare NOT RLIKE
per restituire il risultato opposto.
Più funzioni REGEX
MySQL include anche alcune altre funzioni e operatori regex. Tre di questi sono elencati di seguito. Tecnicamente, potresti anche usare i primi due per "rilevare" se una stringa corrisponde a un pattern regex (in tal caso, forse questo articolo dovrebbe essere intitolato "5 modi per rilevare se una stringa corrisponde a un'espressione regolare in MySQL" invece di solo " 3 modi…”).
Ad ogni modo, ecco altre tre funzioni regex:
- Puoi usare il
REGEXP_INSTR()
funzione per restituire l'indice iniziale di una sottostringa che corrisponde al modello di espressione regolare. - Il
REGEXP_SUBSTR()
funzione restituisce la sottostringa che corrisponde al modello di espressione regolare specificato. - E il
REGEXP_REPLACE()
La funzione sostituisce le occorrenze della sottostringa all'interno di una stringa che corrisponde al modello di espressione regolare specificato.