MySQL - Expressions Régulières

Bonjour, aspirants passionnés de bases de données ! Aujourd'hui, nous plongeons dans le monde fascinant des expressions régulières de MySQL. Ne vous inquiétez pas si vous n'avez jamais codé auparavant - nous allons commencer par les bases et progresser pas à pas. À la fin de ce tutoriel, vous serez capable de manier les expressions régulières comme un pro !

MySQL - Regular Expressions

Qu'est-ce que les Expressions Régulières ?

Avant de nous plonger dans les spécificités de MySQL, comprenons ce qu'elles sont. Imaginez que vous cherchez un motif spécifique dans une énorme quantité de texte. C'est là que les expressions régulières (regex) deviennent utiles ! C'est comme un outil de recherche surpuissant qui peut trouver des motifs complexes dans des chaînes de caractères.

Expressions Régulières en MySQL

En MySQL, nous utilisons l'opérateur REGEXP pour travailler avec les expressions régulières. Il est similaire à l'opérateur LIKE mais bien plus puissant.

Syntaxe de Base

Voici la syntaxe de base :

SELECT column_name(s)
FROM table_name
WHERE column_name REGEXP 'pattern';

Voyons quelques exemples :

SELECT * FROM employees WHERE last_name REGEXP 'son';

Cette requête trouvera tous les employés dont les noms de famille contiennent 'son', comme Johnson, Wilson ou Sonny.

Sensibilité à la Casse

Par défaut, les regex de MySQL sont insensibles à la casse. Si vous souhaitez une correspondance sensible à la casse, utilisez le mot-clé BINARY :

SELECT * FROM employees WHERE last_name REGEXP BINARY 'Smith';

Cela correspondra à 'Smith' mais pas à 'smith' ou 'SMITH'.

Patterns Utilisés avec REGEXP

Explorons maintenant quelques patterns couramment utilisés avec REGEXP. J'aime penser de ces patterns comme le "code secret" de regex - une fois que vous les connaissez, vous pouvez trouver presque n'importe quoi !

^ (Caret) - Début de la Chaîne

Le symbole de caret correspond aux motifs au début d'une chaîne.

SELECT * FROM products WHERE product_name REGEXP '^Apple';

Cela trouve tous les produits dont les noms commencent par 'Apple', comme 'Apple iPhone' ou 'Apple MacBook'.

$ (Dollar) - Fin de la Chaîne

Le signe dollar correspond aux motifs à la fin d'une chaîne.

SELECT * FROM products WHERE product_name REGEXP 'Pro$';

Cela trouve les produits se terminant par 'Pro', comme 'MacBook Pro' ou 'iPad Pro'.

. (Point) - N'importe quel Caractère Unique

Le point correspond à n'importe quel caractère sauf le saut de ligne.

SELECT * FROM words WHERE word REGEXP 'c.t';

Cela correspond aux mots comme 'cat', 'cut' ou même 'c@t' !

* (Asterisque) - Zéro ou Plusieurs Occurrences

L'astérisque correspond à zéro ou plusieurs occurrences du caractère précédent.

SELECT * FROM emails WHERE email REGEXP 'info.*@example.com';

Cela correspond aux emails comme '[email protected]', '[email protected]' ou même '[email protected]'.

+ (Plus) - Une ou Plusieurs Occurrences

Similaire à *, mais nécessite au moins une occurrence.

SELECT * FROM products WHERE product_name REGEXP 'iPad ?Pro+';

Cela correspond à 'iPad Pro', 'iPad Pro', 'iPad Pro', etc.

? (Point d'Interrogation) - Zéro ou Une Occurrence

Le point d'interrogation rend le caractère précédent optionnel.

SELECT * FROM words WHERE word REGEXP 'colou?r';

Cela correspond à la fois 'color' et 'colour'.

[] (Crochets) - Ensemble de Caractères

Les crochets définissent un ensemble de caractères à correspondre.

SELECT * FROM employees WHERE last_name REGEXP '[AEIOU]';

Cela trouve les noms de famille contenant n'importe quelle voyelle.

[^] (Ensemble de Caractères Négatif)

Ajouter un caret à l'intérieur des crochets nie l'ensemble.

SELECT * FROM products WHERE product_name REGEXP '[^0-9]';

Cela trouve les noms de produits qui ne contiennent aucun chiffre.

| (Pipe) - Alternation

Le symbole de pipe agit comme un opérateur OR.

SELECT * FROM animals WHERE species REGEXP 'cat|dog';

Cela trouve tous les chats et chiens dans notre table des animaux.

Fonctions et Opérateurs d'Expression Régulière

MySQL fournit plusieurs fonctions et opérateurs pour travailler avec les expressions régulières. Explorons-les :

Fonction/Opérateur Description
REGEXP Correspond une chaîne à une expression régulière
REGEXP_LIKE() Retourne 1 si la chaîne correspond au motif regex, 0 sinon
REGEXP_INSTR() Retourne l'index de début du premier match regex
REGEXP_REPLACE() Remplace les sous-chaînes correspondant au motif regex
REGEXP_SUBSTR() Retourne la sous-chaîne correspondant au motif regex

Voyons quelques exemples :

REGEXP_LIKE()

SELECT * FROM products WHERE REGEXP_LIKE(product_name, '^iPhone');

Cela trouve tous les produits dont les noms commencent par 'iPhone'.

REGEXP_INSTR()

SELECT email, REGEXP_INSTR(email, '@') AS at_position
FROM users;

Cela retourne la position du symbole '@' dans chaque adresse email.

REGEXP_REPLACE()

SELECT REGEXP_REPLACE('Hello, World!', '[aeiou]', '*') AS vowels_replaced;

Cela remplace toutes les voyelles par des astérisques, retournant 'Hll, W*rld!'.

REGEXP_SUBSTR()

SELECT REGEXP_SUBSTR('[email protected]', '[^@]+') AS username;

Cela extrait le nom d'utilisateur d'une adresse email.

Conclusion

Félicitations ! Vous avez appena fait vos premiers pas dans le puissant monde des expressions régulières de MySQL. Souvenez-vous, la pratique rend parfait. Essayez de créer vos propres motifs regex et expérimentez avec différentes combinaisons.

En continuant votre parcours, vous trouverez que les regex sont comme un couteau suisse dans votre boîte à outils de base de données. Cela peut sembler un peu compliqué au début, mais une fois que vous aurez l'habitude, vous vous demanderez comment vous avez pu vous en passer !

Bonne programmation, et puissent vos requêtes toujours retourner les résultats que vous cherchez !

Credits: Image by storyset