REGEXP_REPLACE 関数 - Amazon Redshift

REGEXP_REPLACE 関数

文字列で正規表現パターンを検索し、このパターンのすべての出現を特定の文字列に置き換えます。REGEXP_REPLACE は REPLACE 関数 関数に似ていますが、文字列で正規表現パターンを検索することができます。正規表現に関する詳細については、「POSIX 演算子」を参照してください。

REGEXP_REPLACE は、TRANSLATE 関数REPLACE 関数 と似ています。ただし、TRANSLATE は複数の単一文字置換を行い、REPLACE は 1 つの文字列全体を別の文字列に置換しますが、REGEXP_REPLACE を使用すると正規表現パターンの文字列を検索できます。

構文

REGEXP_REPLACE ( source_string, pattern [, replace_string [ , position [, parameters ] ] ] )

引数

source_string

検索する文字列式 (列名など)。

pattern

SQL の標準の正規表現パターンを表す文字列リテラル。

replace_string

パターンのすべての出現に置き換わる列名などの文字列式。デフォルトは空の文字列 ("") です。

position

検索を開始する source_string 内の位置を示す正の整数。position はバイト数ではなく文字数に基づくため、マルチバイト文字は 1 文字としてカウントされます。デフォルトは 1 です。position が 1 より小さい場合、source_string の最初の文字から検索が開始されます。positionsource_string の文字数より大きい場合、結果は source_string になります。

パラメータ

関数がパターンと一致するかを示す 1 つ以上のリテラル文字列。取り得る値には以下のものがあります。

  • c – 大文字と小文字を区別する一致を実行します。デフォルトでは大文字と小文字を区別するマッチングを使用します。

  • i – 大文字と小文字を区別しない一致を実行します。

  • p – Perl 互換正規表現 (PCRE) 言語でパターンを解釈します。

戻り型

VARCHAR

pattern または replace_string のいずれかが NULL の場合、戻り値は NULL です。

次の例は、メールアドレスから @ とドメイン名を削除します。

SELECT email, regexp_replace(email, '@.*\\.(org|gov|com|edu|ca)$') FROM users ORDER BY userid LIMIT 4; email | regexp_replace -----------------------------------------------+---------------- Etiam.laoreet.libero@sodalesMaurisblandit.edu | Etiam.laoreet.libero Suspendisse.tristique@nonnisiAenean.edu | Suspendisse.tristique amet.faucibus.ut@condimentumegetvolutpat.ca | amet.faucibus.ut sed@lacusUtnec.ca | sed

次の例は、E メールアドレスのドメイン名を値 internal.company.com に置き換えます。

SELECT email, regexp_replace(email, '@.*\\.[[:alpha:]]{2,3}', '@internal.company.com') FROM users ORDER BY userid LIMIT 4; email | regexp_replace -----------------------------------------------+-------------------------------------------- Etiam.laoreet.libero@sodalesMaurisblandit.edu | Etiam.laoreet.libero@internal.company.com Suspendisse.tristique@nonnisiAenean.edu | Suspendisse.tristique@internal.company.com amet.faucibus.ut@condimentumegetvolutpat.ca | amet.faucibus.ut@internal.company.com sed@lacusUtnec.ca | sed@internal.company.com

次の例は、大文字と小文字を区別しない一致を使用して、値 quick brown fox 内の文字列 FOX のすべての出現箇所を置き換えます。

SELECT regexp_replace('the fox', 'FOX', 'quick brown fox', 1, 'i'); regexp_replace --------------------- the quick brown fox

次の例では、PCRE 言語で記述されたパターンを使用して、少なくとも 1 つの数字と 1 つの小文字を含む単語を検索します。PCRE で特定の先読みの意味を持つ ?= 演算子を使用します。この例では、そのような単語が出現するたびに値 [hidden] に置き換えられます。

SELECT regexp_replace('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', '[hidden]', 1, 'p'); regexp_replace ------------------------------- [hidden] plain A1234 [hidden]

次の例では、PCRE 言語で記述されたパターンを使用して、少なくとも 1 つの数字と 1 つの小文字を含む単語を検索します。PCRE で特定の先読みの意味を持つ ?= 演算子を使用します。この例では、このような単語が出現するたびに値 [hidden] に置き換えられますが、大文字と小文字を区別しない一致結果を使用するという点で前の例とは異なります。

SELECT regexp_replace('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', '[hidden]', 1, 'ip'); regexp_replace ---------------------------------- [hidden] plain [hidden] [hidden]