REGEXP_EXTRACT_ALL 関数は、source 文字列から pattern に一致するすべての部分文字列を抽出し、配列として返します。
構文
ARRAY<T> REGEXP_EXTRACT_ALL(STRING <source>, STRING <pattern>[, BIGINT <group_id>])パラメーター
source: 必須。検索対象の文字列を指定する STRING 値です。
pattern: 必須。一致させるパターンを指定する STRING 定数または正規表現です。正規表現の詳細については、「正規表現の仕様」をご参照ください。
group_id: オプション。0 以上の BIGINT 値である必要があります。
group_id を指定しない場合、システムはデフォルト値の 1 を使用し、group_id が 1 であるすべての一致結果の配列を返します。
group_id を指定した場合、関数はその group_id に一致するすべての結果の配列を返します。
group_id が 0 の場合、pattern 全体が 1 つのグループとして扱われます。
戻り値
ARRAY<STRING> 型の値を返します。以下のルールが適用されます。
pattern が空の文字列である場合、または pattern にキャプチャグループが含まれず、group_id が指定されていない場合は、エラーが返されます。
説明SET odps.sql.bigquery.compatible=true;コマンドを実行して、BigQuery 互換モードを有効にできます。このモードでは、pattern にキャプチャグループが含まれず、group_id が指定されていない場合、関数は pattern 全体に一致する部分文字列の配列を返します。group_id が BIGINT 値でないか、0 未満の場合はエラーが返されます。
source、pattern、または group_id が NULL の場合、関数は NULL を返します。
例
例 1: group_id を指定しない場合、デフォルトで最初の group_id の結果が返されます。
-- ["100","300"] を返します。 SELECT REGEXP_EXTRACT_ALL('100-200, 300-400', '(\\d+)-(\\d+)');例 2: group_id の値を
2に設定します。これにより、2 番目の group_id の結果が返されます。-- ["200","400"] を返します。 SELECT REGEXP_EXTRACT_ALL('100-200, 300-400', '(\\d+)-(\\d+)',2);例 3: pattern にはキャプチャグループが含まれていません。以下のシナリオでコマンドの使用方法を説明します。
シナリオ 1: pattern にキャプチャグループが含まれず、group_id が指定されていない場合は、エラーが返されます。BigQuery 互換モードでは、関数はパターン全体に一致する部分文字列の配列を返します。
-- 失敗: ODPS-0130071:[0,0] Semantic analysis exception - physical plan generation failed: SQL Runtime Unretryable Error: ODPS-0121065:Argument value out of range - Regex group count is 0, but the specified group index is 1 SELECT REGEXP_EXTRACT_ALL('100-200, 300-200', '\\d+-\\d+'); -- BigQuery 互換モードを有効にします。 SET odps.sql.bigquery.compatible=true; -- ["100-200","300-200"] を返します。 SELECT REGEXP_EXTRACT_ALL('100-200, 300-200', '\\d+-\\d+');シナリオ 2: pattern にキャプチャグループが含まれず、group_id が 0 に設定されている場合、関数はパターン全体に一致する部分文字列の配列を返します。
-- ["100-200","300-200"] を返します。 SELECT REGEXP_EXTRACT_ALL('100-200, 300-200', '\\d+-\\d+',0);
関連関数
REGEXP_EXTRACT_ALL は文字列関数です。文字列関数の詳細については、「文字列関数」をご参照ください。