funzione regexp_replace()

La funzione 'regexp_replace() sostituisce ogni istanza di un modello nell'input con il valore nella sostituzione varchar o nvarchar.

Sintassi

La funzione " regexp_replace() ha la seguente sintassi:
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]);

Il valore 'input specifica il valore varchar o nvarchar rispetto al quale viene elaborata l'espressione regolare.

Il valore " pattern specifica l'espressione regolare. Per una descrizione di come specificare i modelli di espressioni regolari compatibili con Perl (PCRE) per i dati Unicode, consultare la documentazione generale di PCRE o le fonti web.

Il valore " replacement specifica il valore da sostituire per ogni istanza del modello. All'interno della stringa sostitutiva, è possibile utilizzare i riferimenti all'indietro per eseguire la corrispondenza con le espressioni all'interno di un gruppo di cattura, come descritto in Riferimenti all'indietro.

Il valore 'start_pos specifica la posizione del carattere nella stringa di pattern da cui iniziare la sostituzione. L'impostazione predefinita è 1.

Il valore 'reference specifica l'istanza del modello da sostituire. Per impostazione predefinita, il valore di riferimento è 0, che sostituisce tutte le istanze del modello con il valore di sostituzione. Per sostituire solo un'istanza specifica del modello, specificare un valore maggiore di 0(1 corrisponde al primo riferimento, 2 al secondo riferimento, 3 al terzo riferimento e così via).

Per una descrizione del valore 'flags, vedere l'argomento flags.

Risultati

La funzione sostituisce ogni istanza di un modello nell'input con il valore nella sostituzione varchar o nvarchar.

Esempio

Nell'esempio seguente, non viene specificato un riferimento, quindi tutte le occorrenze della stringa vengono sostituite:
select regexp_replace('Red Yellow Blue Red Green 
Blue','Red','Orange');
             REGEXP_REPLACE
--------------------------------------
 Orange Yellow Blue Orange Green Blue
(1 row)
Nell'esempio seguente, il valore di riferimento è 2, quindi viene sostituita solo la seconda istanza del modello:
select regexp_replace('Red Yellow Blue Red Green Blue','Red','Orange', 1, 2);
          REGEXP_REPLACE
-----------------------------------
 Red Yellow Blue Orange Green Blue
(1 row)

Riferimenti

È possibile utilizzare i riferimenti all'indietro per abbinare le espressioni all'interno di un gruppo di cattura. Un gruppo di cattura è un'espressione regolare racchiusa da parentesi, (), caratteri. I riferimenti hanno la forma " \number, dove il numero è compreso tra 0 e 9, che si riferisce all'istanza corrispondente del gruppo di cattura.

Nell'esempio seguente, la prima istanza di un gruppo di cattura viene sostituita con la stringa di sostituzione:

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)

Se si desidera specificare una barra in avanti (/) nella stringa sostitutiva, è necessario evitare che la barra sia preceduta da un carattere di slash iniziale, come mostrato nell'esempio seguente:

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)

Esiste un supporto parziale per le stringhe di sostituzione che utilizzano una combinazione di backreferences e lookbehind positivo. La funzione non supporta una corrispondenza quando la stringa lookbehind nel modello lookbehind si trova prima del valore start_pos. Nell'esempio seguente, il modello di espressione regolare viene utilizzato per cercare 'Red seguito da 'Yellow con un inizio_posizione pari a 4. In questo caso, anche se il primo 'Yellow appare in posizione 5 (dopo la posizione iniziale), la corrispondenza modifica la seconda istanza di 'Red Yellow nella stringa di input, perché la prima istanza della stringa di lookbehind 'Red appare prima della posizione iniziale 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)