
REGEXP_REPLACE en Oracle remplace, dans une chaîne, toutes les portions qui correspondent à une expression régulière par un texte de remplacement. C’est la version « surpuissante » de REPLACE : nettoyer des espaces multiples, supprimer des caractères non désirés, reformater des numéros… Voici la syntaxe et des exemples très pratiques.
Syntaxe
REGEXP_REPLACE(source, motif [, remplacement [, position [, occurrence [, options]]]])source: la chaîne d’origine.motif: l’expression régulière à rechercher.remplacement: le texte de remplacement (vide par défaut = suppression).
REGEXP_REPLACE vs REPLACE
REPLACE remplace un texte fixe ; REGEXP_REPLACE remplace selon un motif. Pour un remplacement simple, gardez REPLACE (plus rapide).
Exemples indispensables
Réduire les espaces multiples à un seul
SELECT REGEXP_REPLACE('Jean Pierre Dupont', ' +', ' ') FROM dual;
-- "Jean Pierre Dupont"Supprimer tout sauf les chiffres
SELECT REGEXP_REPLACE('+33 (0)6.12.34.56.78', '[^0-9]', '') FROM dual;
-- "330612345678"Supprimer les caractères non alphanumériques
SELECT REGEXP_REPLACE('Réf: ABC-123!', '[^A-Za-z0-9]', '') FROM dual;
-- "RfABC123"Utiliser les groupes de capture (backreferences)
Avec des parenthèses dans le motif, on réutilise les parties capturées via \1, \2… dans le remplacement.
-- transformer "Dupont, Jean" en "Jean Dupont"
SELECT REGEXP_REPLACE('Dupont, Jean', '(\w+), (\w+)', '\2 \1') FROM dual;
-- "Jean Dupont"-- formater un numéro : 0612345678 -> 06 12 34 56 78
SELECT REGEXP_REPLACE('0612345678',
'(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})', '\1 \2 \3 \4 \5') FROM dual;Remplacer une occurrence précise / à partir d’une position
-- ne remplacer que la 2ème occurrence de "a" par "X"
SELECT REGEXP_REPLACE('banana', 'a', 'X', 1, 2) FROM dual; -- "banXna"Insensible à la casse
SELECT REGEXP_REPLACE('Bonjour BONJOUR', 'bonjour', 'Salut', 1, 0, 'i') FROM dual;
-- "Salut Salut" (0 = toutes les occurrences)La famille REGEXP
- REGEXP_LIKE : tester un motif.
- REGEXP_SUBSTR : extraire la portion correspondante.
- REGEXP_REPLACE : remplacer (cette page).
- REGEXP_INSTR / REGEXP_COUNT : position / nombre d’occurrences.
FAQ
Comment supprimer un motif au lieu de le remplacer ?
Omettez le remplacement (ou mettez une chaîne vide) : REGEXP_REPLACE(col, motif) retire les correspondances.
Que sont \1, \2 dans le remplacement ?
Ce sont les groupes capturés (les parties entre parenthèses du motif). Ils permettent de réorganiser ou reformater le texte.
REGEXP_REPLACE est-il rapide sur de gros volumes ?
Plus coûteux que REPLACE. Pour un remplacement simple et massif, préférez REPLACE ; réservez REGEXP_REPLACE aux motifs réellement complexes.
