すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:REGEXP_EXTRACT_ALL

最終更新日:Oct 23, 2025

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 は文字列関数です。文字列関数の詳細については、「文字列関数」をご参照ください。