regexp_replace() 関数
regexp_replace() 関数は、入力に出現するパターンの各検索結果を varchar または nvarchar の置換文字の値に置換します。
構文
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 の置換文字の値に置換します。例
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)
逆参照
逆参照を使用して収集グループの中の表現を一致させることができます。 収集グループ とは、括弧 () 文字で囲んだ正規表現です。 後方参照は'\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_posが 4のものを検索している。 この場合、最初の'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)