- カテゴリ:
REGEXP_REPLACE¶
指定されたパターン(またはパターンのすべての出現)が削除されたか、置換文字列に置き換えられたサブジェクトを返します。一致するものが見つからない場合、元のサブジェクトを返します。
文字列関数(正規表現) もご参照ください。
構文¶
REGEXP_REPLACE( <subject> , <pattern> [ , <replacement> , <position> , <occurrence> , <parameters> ] )
引数¶
必須:
subject
一致するサブジェクトです。
pattern
一致するパターンです。
オプション:
replacement
パターンと一致したサブ文字列を置き換える文字です。空の文字列が指定されている場合、関数は一致したパターンをすべて削除し、結果の文字列を返します。
デフォルト:
''
(空の文字列)。position
関数が一致の検索を開始する文字列の先頭からの文字数です。
デフォルト:
1
(一致の検索は左側の最初の文字から始まります)occurrence
置換するパターンの出現を指定します。
0
が指定されている場合、すべての出現箇所が置き換えられます。デフォルト:
0
(すべての出現)parameters
一致の検索に使用されるパラメーターを指定する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 lastname
を lastname, firstname middlename
として再配置し、 lastname
と firstname
の間にコンマを挿入します。
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 |
+---------------------------------------------------------------------------------+