fonction regexp_replace()
La fonction " regexp_replace() remplace chaque occurrence d'un motif dans l'entrée par la valeur dans le remplacement varchar ou nvarchar.
Syntaxe
varchar = regexp_replace(varchar input, varchar pattern, varchar
replacement [, int start_pos [, int reference]] [, varchar flags]);
nvarchar = regexp_replace(nvarchar input, nvarchar pattern, nvarchar
replacement [, int start_pos [, int reference]] [, varchar flags]);
La valeur " input spécifie la valeur varchar ou nvarchar par rapport à laquelle l'expression régulière est traitée.
La valeur " pattern spécifie l'expression régulière. Pour une description de la manière de spécifier des motifs d'expression régulière compatibles avec Perl (PCRE) pour les données Unicode, voir la documentation générale PCRE ou les sources web.
La valeur " replacement spécifie la valeur à substituer à chaque occurrence du motif. Dans la chaîne de remplacement, vous pouvez utiliser des références arrière pour faire correspondre des expressions à l'intérieur d'un groupe de capture, comme décrit dans Références arrière.
La valeur " start_pos indique la position du caractère dans la chaîne de motifs à laquelle le remplacement doit commencer. La valeur par défaut est 1.
La valeur " reference indique l'instance du motif à remplacer. Par défaut, la valeur de référence est 0, ce qui remplace toutes les instances du motif par la valeur de remplacement. Pour ne remplacer qu'une instance spécifique du motif, spécifiez une valeur supérieure à 0(1 correspond à la première référence, 2 à la deuxième référence, 3 à la troisième référence, et ainsi de suite).
Pour une description de la valeur " flags, voir l'argument "flags".
Retours
La fonction remplace chaque instance d'un motif dans l'entrée par la valeur dans le remplacement varchar ou nvarchar.Exemple
select regexp_replace('Red Yellow Blue Red Green
Blue','Red','Orange');
REGEXP_REPLACE
--------------------------------------
Orange Yellow Blue Orange Green Blue
(1 row)
select regexp_replace('Red Yellow Blue Red Green Blue','Red','Orange', 1, 2);
REGEXP_REPLACE
-----------------------------------
Red Yellow Blue Orange Green Blue
(1 row)
Références bibliographiques
Vous pouvez utiliser les références arrière pour faire correspondre des expressions à l'intérieur d'un groupe de capture. Un groupe de capture est une expression régulière entourée de parenthèses (). Les références arrière ont la forme " \number, où le nombre est compris entre 0 et 9, ce qui renvoie à l'instance correspondante du groupe de capture.
Dans l'exemple suivant, la première instance d'un groupe de capture est remplacée par la chaîne de remplacement :
select regexp_replace('Red Yellow Blue Red Green Blue','(Red)',
'Colors: \1', 1, 1);
REGEXP_REPLACE
----------------------------------------
Colors: Red Yellow Blue Red Green Blue
(1 row) Si vous souhaitez spécifier une barre oblique (/) dans la chaîne de remplacement, échappez la barre oblique à l'aide d'une barre oblique principale, comme indiqué dans l'exemple suivant :
select regexp_replace('Red Yellow Blue Red Green Blue','(Red)',
'\\Colors: \1', 1, 1);
REGEXP_REPLACE
-----------------------------------------
\Colors: Red Yellow Blue Red Green Blue
(1 row) Il existe un support partiel pour les chaînes de remplacement qui utilisent une combinaison de backreferences et de lookbehind positif. La fonction ne permet pas d'établir une correspondance lorsque la chaîne de caractères du motif de recherche est antérieure à la valeur start_pos. Dans l'exemple suivant, l'expression régulière est utilisée pour rechercher " Red suivi de " Yellow avec un start_pos de 4. Dans ce cas, même si le premier " Yellow apparaît en position 5 (après la position de départ), la correspondance modifie la deuxième occurrence de " Red Yellow dans la chaîne d'entrée parce que la première occurrence de la chaîne de référence " Red " apparaît avant la position de départ 4.
select regexp_replace('Red Yellow Red Green Red Yellow Red Blue Red Yellow',
'(?<=Red )(Yellow)','INSERT \1',4,1);
REGEXP_REPLACE
------------------------------------------------------------
Red Yellow Red Green Red INSERT Yellow Red Blue Red Yellow
(1 row)