- カテゴリ:
REGEXP_SUBSTR_ALL¶
文字列内の正規表現に一致するすべてのサブ文字列が含まれる、 ARRAY を返します。一致するものが見つからない場合、関数は空の ARRAY を返します。
- エイリアス:
REGEXP_EXTRACT_ALL
文字列関数(正規表現) もご参照ください。
構文¶
REGEXP_SUBSTR_ALL( <subject> , <pattern> [ , <position> [ , <occurrence> [ , <regex_parameters> [ , <group_num> ] ] ] ] )
引数¶
必須:
subject
一致を検索する文字列です。
pattern
一致するパターン。
パターンの指定に関するガイドラインについては、 文字列関数(正規表現) をご参照ください。
オプション:
position
関数が一致の検索を開始する文字列の先頭からの文字数です。
デフォルト:
1
(一致の検索は左側の最初の文字から始まります)occurrence
一致を返し始めるパターンの最初の出現を指定します。この関数は、最初の
occurrence - 1
の一致をスキップします。たとえば、
5
件の一致があり、occurrence
引数に3
を指定した場合、関数は最初の2件の一致を無視し、3番目、4番目、5番目の一致を返します。デフォルト:
1
regex_parameters
一致の検索に使用される正規表現パラメーターを指定する1つ以上の文字の文字列です。サポートされている値は次のとおりです。
c
:大文字と小文字を区別します。i
:大文字と小文字を区別しません。m
:複数行モードです。e
:部分一致を抽出します。s
:「ワイルドカード」は改行にも一致します。
詳細については、 正規表現パラメーター のドキュメントをご参照ください。
デフォルト:
c
注釈
デフォルトでは、 REGEXP_SUBSTR_ALL は件名の一致部分全体を返します。ただし、
e
(「抽出」のため)パラメーターが指定されている場合、 REGEXP_SUBSTR_ALL はパターンの最初のグループに一致するサブジェクトの部分を返します。e
は指定されているものの、group_num
が指定されていない場合、group_num
はデフォルトで1(最初のグループ)になります。パターンにサブ式がない場合、 REGEXP_SUBSTR_ALL はe
が設定されていないかのように動作します。e
を使用する例については、このトピックの 例 をご参照ください。group_num
group_num
パラメーターは、抽出するグループを指定します。グループは、正規表現で括弧を使用して指定されます。group_num
が指定されている場合、Snowflakeは'e'
オプションが指定されていなくても抽出を許可します。'e'
が暗黙的に示されます。Snowflakeは最大1024個のグループをサポートします。
group_num
を使用する例については、このトピックの 例 をご参照ください。
戻り値¶
この関数は、 ARRAY 型の値を返します。ARRAY には、一致する各サブ文字列の要素が含まれています。
group_num
を指定し、パターンでその番号のグループ化が指定されていない場合、関数は NULL を返します。たとえば、パターンが1つのグループ(例: a(b)c
)のみを指定し、 2
を group_num
として使用する場合、関数は NULL を返します。
使用上の注意¶
正規表現の使用に関する追加情報については、 文字列関数(正規表現) をご参照ください。
照合の詳細¶
Arguments with collation specifications are currently not supported.
例¶
次の例のパターンは、小文字の「a」とそれに続く数字に一致します。この例では、一致すべてを含む ARRAY が返されます。
select regexp_substr_all('a1_a2a3_a4A5a6', 'a[[:digit:]]') as matches; +---------+ | MATCHES | |---------| | [ | | "a1", | | "a2", | | "a3", | | "a4", | | "a6" | | ] | +---------+
次の例では、文字列(2
)の2番目の文字から一致の検索を開始します。
select regexp_substr_all('a1_a2a3_a4A5a6', 'a[[:digit:]]', 2) as matches; +---------+ | MATCHES | |---------| | [ | | "a2", | | "a3", | | "a4", | | "a6" | | ] | +---------+
次の例では、文字列(3
)にあるパターンの3番目の発生から一致を返し始めます。
select regexp_substr_all('a1_a2a3_a4A5a6', 'a[[:digit:]]', 1, 3) as matches; +---------+ | MATCHES | |---------| | [ | | "a3", | | "a4", | | "a6" | | ] | +---------+
次の例では、大文字と小文字を区別しない一致(i
)を実行します。
select regexp_substr_all('a1_a2a3_a4A5a6', 'a[[:digit:]]', 1, 1, 'i') as matches; +---------+ | MATCHES | |---------| | [ | | "a1", | | "a2", | | "a3", | | "a4", | | "A5", | | "a6" | | ] | +---------+
次の例では、大文字と小文字を区別しない一致を実行し、最初のグループ(ie
)に一致する文字列の部分を返します。
select regexp_substr_all('a1_a2a3_a4A5a6', '(a)([[:digit:]])', 1, 1, 'ie') as matches; +---------+ | MATCHES | |---------| | [ | | "a", | | "a", | | "a", | | "a", | | "A", | | "a" | | ] | +---------+
次の例は、一致するものが見つからない場合に関数が空の ARRAY を返すことを示しています。
select regexp_substr_all('a1_a2a3_a4A5a6', 'b') as matches; +---------+ | MATCHES | |---------| | [] | +---------+