カテゴリ:

文字列関数(正規表現)

REGEXP_REPLACE

指定されたパターン(またはパターンのすべての出現)が削除されたか、置換文字列に置き換えられたサブジェクトを返します。

文字列関数(正規表現) もご参照ください。

構文

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

引数

必須:

subject

一致を検索する文字列です。

pattern

一致するパターンです。

パターンの指定に関するガイドラインについては、 文字列関数(正規表現) をご参照ください。

オプション:

replacement

パターンと一致したサブ文字列を置き換える文字です。空の文字列が指定されている場合、関数は一致したパターンをすべて削除し、結果の文字列を返します。

デフォルト: '' (空の文字列)。

position

関数が一致の検索を開始する文字列の先頭からの文字数です。

デフォルト: 1 (一致の検索は左側の最初の文字から始まります)

occurrence

置換するパターンの出現を指定します。 0 が指定されている場合、すべての出現箇所が置き換えられます。

デフォルト: 0 (すべての出現)

parameters

一致の検索に使用されるパラメーターを指定する1つ以上の文字の文字列です。サポートされている値:

パラメーター

説明

c

大文字と小文字を区別する一致

i

大文字と小文字を区別しない一致

m

複数行モード

e

部分一致を抽出

s

POSIX wildcard character . matches \n

デフォルト: c

詳細については、 正規表現のパラメーターの指定 をご参照ください。

戻り値

VARCHAR 型の値を返します。

一致するものが見つからない場合、元のサブジェクトを返します。

いずれかの引数が NULL の場合は NULL を返します。

使用上の注意

  • 置換文字列には、グループをキャプチャするためのバックリファレンス(例えば、パターンのサブ式)を含めることができます。キャプチャグループは、括弧(( ))で囲まれた正規表現です。キャプチャグループの最大数は9です。

    バックリファレンスは、キャプチャグループ内の式と一致します。バックリファレンスの形式は n で、 n は0から9までの値であり、キャプチャグループの一致するインスタンスを参照します。詳細については、 (このトピック内)をご参照ください。

  • 現在、括弧(( ))と角括弧([ ])は、リテラル文字列として解析するために二重エスケープする必要があります。

    次の例は、括弧を削除する方法を示しています。

    SELECT REGEXP_REPLACE('Customers - (NY)','\\(|\\)','') AS customers;
    
    Copy
    +----------------+
    | CUSTOMERS      |
    |----------------|
    | Customers - NY |
    +----------------+
    
  • 追加の使用上の注意については、正規表現関数の 一般的な使用上の注意 をご参照ください。

照合順序の詳細

Arguments with collation specifications are currently not supported.

次の例では、文字列内のすべてのスペースをスペース無しに置き換えます(つまり、すべてのスペースが削除されます)。

SELECT REGEXP_REPLACE('It was the best of times, it was the worst of times',
                      '( ){1,}',
                      '') AS result;
Copy
+------------------------------------------+
| RESULT                                   |
|------------------------------------------|
| Itwasthebestoftimes,itwastheworstoftimes |
+------------------------------------------+

次の例では、文字列 times をマッチングし、文字列 days に置き換えます。マッチングは、文字列内の最初の文字から始まり、部分文字列の2番目の出現を置き換えます。

SELECT REGEXP_REPLACE('It was the best of times, it was the worst of times',
                      'times',
                      'days',
                      1,
                      2) AS result;
Copy
+----------------------------------------------------+
| RESULT                                             |
|----------------------------------------------------|
| It was the best of times, it was the worst of days |
+----------------------------------------------------+

次の例では、後方参照を使用して文字列 firstname middlename lastnamelastname, firstname middlename として再配置し、 lastnamefirstname の間にコンマを挿入します。

SELECT REGEXP_REPLACE('firstname middlename lastname',
                      '(.*) (.*) (.*)',
                      '\\3, \\1 \\2') AS name_sort;
Copy
+--------------------------------+
| NAME_SORT                      |
|--------------------------------|
| lastname, firstname middlename |
+--------------------------------+