regexp_replace() 関数

regexp_replace() 関数は、入力に出現するパターンの各検索結果を varchar または nvarchar の置換文字の値に置換します。

構文

regexp_replace() 関数の構文は次のとおりです。
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]);

input の値には、正規表現の処理対象となる varchar または nvarchar の値を指定します。

pattern の値には、正規表現を指定します。 Unicode データに Perl と互換性のある正規表現 (PCRE) パターンを指定する方法については、一般の PCRE 資料または Web ソースを参照してください。

replacement の値には、パターンの各検索結果を置き換える値を指定します。 置換文字列の中で、後方参照を使用すると、後方参照で説明するように、キャプチャグループ内の式にマッチさせることができる。

start_pos の値には、置換を開始するパターン・ストリング内の文字位置を指定します。 デフォルトは1

reference の値には、置換するパターンの検索結果を指定します。 reference のデフォルト値は 0 です。その場合は、パターンのすべての検索結果が置換値に置き換えられます。 パターンの特定の検索結果だけを置換する場合は、0 より大きい値を指定します (1 は 1 番目の検索結果、2 は 2 番目の検索結果、3 は 3 番目の検索結果という具合になります)。

flags説明については、flags引数を参照のこと。

戻り

この関数は、入力に出現するパターンの各検索結果を varchar または nvarchar の置換文字の値に置換します。

次の例では、reference を指定していないので、ストリングのすべての出現箇所が置換されます。
select regexp_replace('Red Yellow Blue Red Green 
Blue','Red','Orange');
             REGEXP_REPLACE
--------------------------------------
 Orange Yellow Blue Orange Green Blue
(1 row)
次の例では、reference の値が 2 なので、パターンの 2 番目の検索結果だけが置換されます。
select regexp_replace('Red Yellow Blue Red Green Blue','Red','Orange', 1, 2);
          REGEXP_REPLACE
-----------------------------------
 Red Yellow Blue Orange Green Blue
(1 row)

逆参照

逆参照を使用して収集グループの中の表現を一致させることができます。 収集グループ とは、括弧 () 文字で囲んだ正規表現です。 後方参照は'\number形式を持ち、数字0から 9までで、キャプチャグループの一致するインスタンスを指す。

次の例では、収集グループの 1 番目の検索結果を置き換えストリングに置換します。

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)

置き換えストリングでスラッシュ (/) を指定する場合は、以下の例のように、先頭にスラッシュ文字を付けてスラッシュをエスケープします。

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)

逆参照および肯定後読みの組み合わせを使用して、置き換えストリングを部分的にサポートします。 後読みパターン内の後読みストリングが start_pos の値の前に出現する場合、この関数は、そのマッチングを処理しません。 以下の例では、正規表現パターンを使って、「Red後に「Yellow続き、start_pos4のものを検索している。 この場合、最初の'Yellowが5番目の位置(開始位置の後)に現れたとしても、ルックビハインド文字列の最初のインスタンス'Redが開始位置4の前に現れるため、マッチは入力文字列の2番目のインスタンス'Red Yellowを変更する。

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)