Mysql
 sql >> Base de données >  >> RDS >> Mysql

3 façons de détecter si une chaîne correspond à une expression régulière dans MySQL

MySQL a un certain nombre de fonctions et d'opérateurs qui nous permettent d'effectuer des opérations à l'aide d'expressions régulières (regex). Cet article présente deux opérateurs et une fonction qui permettent de savoir si une chaîne correspond à une expression régulière spécifiée par un motif donné.

Ces fonctions et opérateurs regex sont :

  • REGEXP_LIKE()
  • REGEXP
  • RLIKE

Ce sont tous fondamentalement équivalents, car les opérateurs (les deux seconds) sont tous deux synonymes de la fonction (le premier). Dans tous les cas, vous pouvez voir des exemples des trois en action ci-dessous.

Le REGEXP_LIKE() Fonction

Voyons d'abord la fonction. Voici un exemple d'exécution d'une recherche regex à l'aide de REGEXP_LIKE() fonction :

SELECT 
  REGEXP_LIKE('Car', '^C') AS 'Match',
  REGEXP_LIKE('Bar', '^C') AS 'No Match';

Résultat :

+-------+----------+
| Match | No Match |
+-------+----------+
|     1 |        0 |
+-------+----------+

La première chaîne correspond (car elle commence par C ) donc le résultat est 1 . La deuxième chaîne ne correspond pas et le résultat est donc 0 .

Cependant, cette fonction peut être beaucoup plus utile que de simplement retourner un 1 ou 0 . Par exemple, il peut être ajouté au WHERE clause lors de l'interrogation d'une base de données. Dans ce cas, nous pouvons obtenir une liste de lignes contenant une correspondance pour le modèle.

Voici un exemple :

SELECT AlbumId, AlbumName
FROM Albums
WHERE REGEXP_LIKE(AlbumName, '^Power');

Résultat :

+---------+------------+
| AlbumId | AlbumName  |
+---------+------------+
|       1 | Powerslave |
|       2 | Powerage   |
+---------+------------+

Voici le tableau complet :

SELECT AlbumId, AlbumName
FROM Albums;

Résultat :

+---------+--------------------------+
| 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  |
+---------+--------------------------+

La REGEXP Opérateur

Voici comment faire la même chose en utilisant le REGEXP opérateur :

SELECT 
  'Car' REGEXP '^C' AS 'Match',
  'Bar' REGEXP '^C' AS 'No Match';

Résultat :

+-------+----------+
| Match | No Match |
+-------+----------+
|     1 |        0 |
+-------+----------+

Et l'exemple de la base de données :

SELECT AlbumId, AlbumName
FROM Albums
WHERE AlbumName REGEXP '^Power';

Résultat :

+---------+------------+
| AlbumId | AlbumName  |
+---------+------------+
|       1 | Powerslave |
|       2 | Powerage   |
+---------+------------+

Vous pouvez également utiliser NOT REGEXP pour retourner le résultat opposé.

Le RLIKE Opérateur

Et ici, il utilise RLIKE :

SELECT 
  'Car' RLIKE '^C' AS 'Match',
  'Bar' RLIKE '^C' AS 'No Match';

Résultat :

+-------+----------+
| Match | No Match |
+-------+----------+
|     1 |        0 |
+-------+----------+

Et l'exemple de la base de données :

SELECT AlbumId, AlbumName
FROM Albums
WHERE AlbumName RLIKE '^Power';

Résultat :

+---------+------------+
| AlbumId | AlbumName  |
+---------+------------+
|       1 | Powerslave |
|       2 | Powerage   |
+---------+------------+

Dans ce cas, j'ai simplement échangé REGEXP pour RLIKE et laissé le reste du code seul.

Vous pouvez également utiliser NOT RLIKE pour retourner le résultat opposé.

Plus de fonctions REGEX

MySQL inclut également quelques autres fonctions et opérateurs regex. Trois d'entre eux sont énumérés ci-dessous. Techniquement, vous pouvez également utiliser les deux premiers pour "détecter" si une chaîne correspond à un modèle regex (auquel cas, cet article devrait peut-être s'intituler "5 façons de détecter si une chaîne correspond à une expression régulière dans MySQL" au lieu de simplement " 3 façons… »).

Quoi qu'il en soit, voici trois autres fonctions regex :

  • Vous pouvez utiliser le REGEXP_INSTR() fonction pour renvoyer l'index de départ d'une sous-chaîne qui correspond au modèle d'expression régulière.
  • Le REGEXP_SUBSTR() La fonction renvoie la sous-chaîne qui correspond au modèle d'expression régulière donné.
  • Et le REGEXP_REPLACE() La fonction remplace les occurrences de la sous-chaîne dans une chaîne qui correspond au modèle d'expression régulière donné.