カテゴリ:

文字列関数(正規表現)

REGEXP_REPLACE

指定されたパターン(またはパターンのすべての出現)が削除されたか、置換文字列に置き換えられたサブジェクトを返します。一致するものが見つからない場合、元のサブジェクトを返します。

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

構文

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

引数

必須:

サブジェクト

一致するサブジェクトです。

パターン

一致するパターンです。

オプション:

置換

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

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

ポジション

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

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

オカレンス

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

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

パラメーター

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

c , i , m , e , s

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

デフォルト: c

使用上の注意

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

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

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

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

    SELECT REGEXP_REPLACE('Customers - (NY)','\\(|\\)','') AS customers;
    
    +----------------+
    | 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" from dual;

+------------------------------------------+
| result                                   |
|------------------------------------------|
| Itwasthebestoftimes,itwastheworstoftimes |
+------------------------------------------+

次の例では、文字列 times をマッチングし、文字列 days に置き換えます。マッチングは、ストリング内の1番目の文字から始まり、サブ文字列の2番目の出現を置き換えます。

select regexp_replace('It was the best of times, it was the worst of times', 'times','days',1,2) as "result" from dual;

+----------------------------------------------------+
| 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" from dual;

+---------------------------------------------------------------------------------+
| REGEXP_REPLACE('FIRSTNAME MIDDLENAME LASTNAME','(.*) (.*) (.*)','\\3, \\1 \\2') |
|---------------------------------------------------------------------------------|
| lastname, firstname middlename                                                  |
+---------------------------------------------------------------------------------+