Syntaxe de base de REGEXP_REPLACE
- 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 :
- 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+
)
- SELECT REGEXP_REPLACE(nom, '(\w+) (\w+)', '\2 \1') FROM spip_auteurs;
Autres opérateurs REGEXP_... de MySQL
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 |
Références :
- les bases des REGEXP en MySQL : https://www.geeksforgeeks.org/mysql/mysql-regular-expressions-regexp/
- les opérateurs REGEXP_... : https://w3schools.tech/fr/tutorial/mysql/mysql-regexps
- quelques considérations sur les performances des requêtes avec des REGEXP : https://www.slingacademy.com/article/how-to-perform-full-text-search-in-mysql-8/#performance-considerations
- référence officielle : https://dev.mysql.com/doc/refman/8.0/en/regexp.html#function_regexp-replace