Utiliser REGEXP_REPLACE pour faire des remplacements en MYSQL

REGEXP_REPLACE permet d’utiliser des expressions régulières pour faire des remplacements en MYSQL

, par clem

Syntaxe de base de REGEXP_REPLACE

  1. REGEXP_REPLACE("la chaine sur laquelle on veut faire le remplacement", "expression régulière", "la chaine de remplacement")

Pour la syntaxe complète (paramètres supplémentaires position, nbre d’occurrences, type de remplacement) voir https://dev.mysql.com/doc/refman/8.0/en/regexp.html#function_regexp-replace

Utiliser REGEXP_REPLACE dans un UPDATE

Dans cet exemple on souhaite supprimer (= remplacer par une chaine vide) les numéros qui précèdent le texte dans le champ titre de la table spip_articles. Ces numéros sont tous en début de titre et suivi par un point et un espace : l’expression régulière pour les "attraper" sera donc : ^[0-9]*\. , ce qui donne comme syntaxe de l’UPDATE :

  1. UPDATE spip_articles SET titre = REGEXP_REPLACE(titre, "^[0-9]*\. ", "");

Utiliser des références aux groupes capturés par la regexp

Classiquement les captures de la regexp peuvent être séparées en groupes par des parenthèses. Ces groupes peuvent ensuite êtres appelés dans le remplacement par le modèle \1, \2...
Exemple : récupérer le contenu d’un champ nom et échanger la place du premier mot avec le deuxième (regexp pour "attraper un mot : \w+)

  1. SELECT REGEXP_REPLACE(nom, '(\w+) (\w+)', '\2 \1') FROM spip_auteurs;

Autres opérateurs REGEXP_... de MySQL

Fonction/OpérateurDescription
REGEXP Correspond une chaîne à une expression régulière

SELECT * FROM mon_annuaire WHERE telephone REGEXP "^00"

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

Références :