REGEXP_INSTR 関数 - Amazon Redshift

REGEXP_INSTR 関数

文字列で正規表現パターンを検索し、一致するサブ文字列の開始位置を示す整数を返します。一致がない場合、この関数は 0 を返します。REGEXP_INSTR は 関数に似ていますが、文字列で正規表現パターンを検索することができます。正規表現の詳細については、Wikipedia の「POSIX 演算子」と「正規表現」を参照してください。

構文

REGEXP_INSTR( source_string, pattern [, position [, occurrence] [, option [, parameters ] ] ] ] )

引数

source_string

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

pattern

正規表現パターンを表す UTF-8 文字列リテラル。詳細については、「POSIX 演算子」を参照してください。

position

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

occurrence

(オプション) このパターンのどの出現を使用するかを示す正の INTEGER。REGEXP_INSTR は、最初の occurrence-1 の一致をスキップします。デフォルト: 1occurrence1 未満、または source_string の文字数を超える場合、検索は無視され、結果は 0 となります。

option

(オプション) 一致の先頭文字の戻り位置 (0)、または続く一致の末尾の最初の文字位置 (1) のどちらかを示す値。ゼロ以外の値は 1 と同じです。デフォルト値は 0 です。

parameters

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

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

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

  • e – 部分式を使用して部分文字列を抽出します。

    パターンに部分式が含まれる場合、REGEXP_INSTR は最初の部分式をパターンで使用して部分文字列を一致させます。REGEXP_INSTR は最初の部分式のみを考慮します。追加の部分式は無視されます。パターンに部分式がない場合、REGEXP_INSTR は「e」パラメータを無視します。

  • p – Perl 互換正規表現 (PCRE) 言語でパターンを解釈します。PCRE の詳細については、Wikipedia の「Perl 互換の正規表現」を参照してください。

戻り型

整数

次の例では、TICKIT サンプルデータベースの USERS テーブルからのデータを使用します。詳細については、「サンプルデータベース」を参照してください。

ドメイン名を開始する @ 文字を検索し、最初の一致の開始位置を返すには、次の例を使用します。

SELECT email, REGEXP_INSTR(email, '@[^.]*') FROM users ORDER BY userid LIMIT 4; +-----------------------------------------------+--------------+ | email | regexp_instr | +-----------------------------------------------+--------------+ | Etiam.laoreet.libero@sodalesMaurisblandit.edu | 21 | | Suspendisse.tristique@nonnisiAenean.edu | 22 | | amet.faucibus.ut@condimentumegetvolutpat.ca | 17 | | sed@lacusUtnec.ca | 4 | +-----------------------------------------------+--------------+

Center という単語のバリエーションを検索し、最初の一致の開始位置を返すには、次の例を使用します。

SELECT venuename, REGEXP_INSTR(venuename,'[cC]ent(er|re)$') FROM venue WHERE REGEXP_INSTR(venuename,'[cC]ent(er|re)$') > 0 ORDER BY venueid LIMIT 4; +-----------------------+--------------+ | venuename | regexp_instr | +-----------------------+--------------+ | The Home Depot Center | 16 | | Izod Center | 6 | | Wachovia Center | 10 | | Air Canada Centre | 12 | +-----------------------+--------------+

大文字と小文字を区別しない一致ロジックを使用して、文字列 FOX が最初に出現する開始位置を検索するには、次の例を使用します。

SELECT REGEXP_INSTR('the fox', 'FOX', 1, 1, 0, 'i'); +--------------+ | regexp_instr | +--------------+ | 5 | +--------------+

PCRE 言語で記述されたパターンを使用して、少なくとも 1 つの数字と 1 つの小文字を含む単語を検索するには、次の例を使用します。PCRE で特定の先読みの意味を持つ ?= 演算子を使用します。この例では、2 番目の単語の開始位置を見つけます。

SELECT REGEXP_INSTR('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', 1, 2, 0, 'p'); +--------------+ | regexp_instr | +--------------+ | 21 | +--------------+

PCRE 言語で記述されたパターンを使用して、少なくとも 1 つの数字と 1 つの小文字を含む単語を検索するには、次の例を使用します。PCRE で特定の先読みの意味を持つ ?= 演算子を使用します。この例では、2 番目の単語の開始位置を検索しますが、大文字と小文字を区別しない一致結果を使用する点で前の例とは異なります。

SELECT REGEXP_INSTR('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', 1, 2, 0, 'ip'); +--------------+ | regexp_instr | +--------------+ | 15 | +--------------+