Catégories :

Fonctions de chaîne (expressions régulières)

REGEXP_REPLACE

Renvoie le sujet avec le modèle spécifié (ou toutes les occurrences du modèle) soit supprimé soit remplacé par une chaîne de remplacement. Si aucune correspondance n’est trouvée, le sujet d’origine est renvoyé.

Voir aussi Fonctions de chaîne (expressions régulières).

Syntaxe

REGEXP_REPLACE( <subject> , <pattern> [ , <replacement> , <position> , <occurrence> , <parameters> ] )

Arguments

Obligatoire :

sujet

Sujet devant correspondre.

motif

Modèle devant correspondre.

Facultatif :

remplacement

Chaîne qui remplace les sous-chaînes correspondant au motif. Si une chaîne vide est spécifiée, la fonction supprime tous les motifs correspondants et renvoie la chaîne résultante.

Valeur par défaut : '' (chaîne vide).

position

Nombre de caractères depuis le début de la chaîne pour lesquels la fonction commence à rechercher des correspondances.

Par défaut : 1 (la recherche d’une correspondance commence au premier caractère à gauche)

occurrence

Spécifie l’occurrence du modèle devant correspondre. Si 0 est spécifié, toutes les occurrences sont remplacées.

Par défaut : 0 (toutes les occurrences)

paramètres

Chaîne d’un ou plusieurs caractères spécifiant les paramètres utilisés pour la recherche de correspondances. Valeurs prises en charge :

c , i , m , e , s

Pour plus de détails, voir les paramètres d’expression régulière.

Par défaut : c

Notes sur l’utilisation

  • La chaîne de remplacement peut contenir des références arrières pour capturer des groupes (c’est-à-dire des sous-expressions du modèle). Un groupe de capture est une expression régulière placée entre parenthèses (( )). Le nombre maximal de groupes de capture est 9.

    Les références arrières cherchent les expressions correspondantes à l’intérieur d’un groupe de capture. Les références arrière ont la forme nn est une valeur comprise entre 0 et 9 inclus, qui fait référence à l’instance correspondante du groupe de capture. Pour plus de détails, voir Exemples (dans ce chapitre).

  • Les parenthèses (( )) et les crochets ([ ]) doivent actuellement être doublés pour être analysés sous forme de chaînes de littéraux.

    L’exemple ci-dessous montre comment supprimer les parenthèses :

    SELECT REGEXP_REPLACE('Customers - (NY)','\\(|\\)','') AS customers;
    
    +----------------+
    | CUSTOMERS      |
    |----------------|
    | Customers - NY |
    +----------------+
    
  • Pour des notes d’utilisation supplémentaires, voir Notes générales sur l’utilisation pour les fonctions d’expression régulière.

Détails du classement

Arguments with collation specifications are currently not supported.

Exemples

L’exemple suivant remplace tous les espaces de la chaîne par rien ; c’est-à-dire que tous les espaces sont supprimés :

select regexp_replace('It was the best of times, it was the worst of times', '( ){1,}','') as "result" from dual;

+------------------------------------------+
| result                                   |
|------------------------------------------|
| Itwasthebestoftimes,itwastheworstoftimes |
+------------------------------------------+

L’exemple suivant correspond à la chaîne times et la remplace par la chaîne days. La correspondance commence au premier caractère de la chaîne et remplace la deuxième occurrence de la sous-chaîne :

select regexp_replace('It was the best of times, it was the worst of times', 'times','days',1,2) as "result" from dual;

+----------------------------------------------------+
| result                                             |
|----------------------------------------------------|
| It was the best of times, it was the worst of days |
+----------------------------------------------------+

L’exemple suivant utilise des références arrières pour réorganiser la chaîne firstname middlename lastname en tant que lastname, firstname middlename et insérer une virgule entre lastname et firstname :

select regexp_replace('firstname middlename lastname','(.*) (.*) (.*)','\\3, \\1 \\2') as "name sort" from dual;

+---------------------------------------------------------------------------------+
| REGEXP_REPLACE('FIRSTNAME MIDDLENAME LASTNAME','(.*) (.*) (.*)','\\3, \\1 \\2') |
|---------------------------------------------------------------------------------|
| lastname, firstname middlename                                                  |
+---------------------------------------------------------------------------------+