カテゴリ:

文字列関数(正規表現)

REGEXP_SUBSTR_ALL

文字列内の正規表現に一致するすべてのサブ文字列が含まれる、 ARRAY を返します。一致するものが見つからない場合、関数は空の ARRAY を返します。

エイリアス:

REGEXP_EXTRACT_ALL

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

構文

REGEXP_SUBSTR_ALL( <subject> , <pattern> [ , <position> [ , <occurrence> [ , <regex_parameters> [ , <group_num> ] ] ] ] )
Copy

引数

必須:

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)のみを指定し、 2group_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"  |
| ]       |
+---------+
Copy

次の例では、文字列(2)の2番目の文字から一致の検索を開始します。

select regexp_substr_all('a1_a2a3_a4A5a6', 'a[[:digit:]]', 2) as matches;
+---------+
| MATCHES |
|---------|
| [       |
|   "a2", |
|   "a3", |
|   "a4", |
|   "a6"  |
| ]       |
+---------+
Copy

次の例では、文字列(3)にあるパターンの3番目の発生から一致を返し始めます。

select regexp_substr_all('a1_a2a3_a4A5a6', 'a[[:digit:]]', 1, 3) as matches;
+---------+
| MATCHES |
|---------|
| [       |
|   "a3", |
|   "a4", |
|   "a6"  |
| ]       |
+---------+
Copy

次の例では、大文字と小文字を区別しない一致(i)を実行します。

select regexp_substr_all('a1_a2a3_a4A5a6', 'a[[:digit:]]', 1, 1, 'i') as matches;
+---------+
| MATCHES |
|---------|
| [       |
|   "a1", |
|   "a2", |
|   "a3", |
|   "a4", |
|   "A5", |
|   "a6"  |
| ]       |
+---------+
Copy

次の例では、大文字と小文字を区別しない一致を実行し、最初のグループ(ie)に一致する文字列の部分を返します。

select regexp_substr_all('a1_a2a3_a4A5a6', '(a)([[:digit:]])', 1, 1, 'ie') as matches;
+---------+
| MATCHES |
|---------|
| [       |
|   "a",  |
|   "a",  |
|   "a",  |
|   "a",  |
|   "A",  |
|   "a"   |
| ]       |
+---------+
Copy

次の例は、一致するものが見つからない場合に関数が空の ARRAY を返すことを示しています。

select regexp_substr_all('a1_a2a3_a4A5a6', 'b') as matches;
+---------+
| MATCHES |
|---------|
| []      |
+---------+
Copy