Mysql
 sql >> Database >  >> RDS >> Mysql

3 modi per rilevare se una stringa corrisponde a un'espressione regolare in MySQL

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.