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é.