全部產品
Search
文件中心

MaxCompute:REGEXP_EXTRACT_ALL

更新時間:Sep 10, 2025

REGEXP_EXTRACT_ALL函數用於在字串source中尋找所有與pattern匹配的子字串,並以數組形式返回所有找到的字串。

命令格式

ARRAY<T> REGEXP_EXTRACT_ALL(STRING <source>, STRING <pattern>[,BIGINT <group_id>])

參數說明

  • source:必填。STRING類型。被匹配的字串。

  • pattern:必填。STRING類型常量或Regex。用於匹配的子字串或Regex。更多Regex編寫規範,請參見Regex規範。

  • group_id:可選。BIGINT類型。取值大於等於0。

    • 如果不指定group_id, 預設為1,返回group_id為1的所有匹配結果組成的數組。

    • 如果指定group_id,返回該group_id匹配的所有結果組成的數組。

    • 如果group_id等於0,pattern將被當作一個整體進行匹配。

傳回值說明

返回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。

使用樣本

  • 樣本一:不指定group_id時,預設返回第一個group_id匹配到的結果。

    -- 返回 ["100","300"]。
    SELECT REGEXP_EXTRACT_ALL('100-200, 300-400', '(\\d+)-(\\d+)');
  • 樣本二:指定group_id值為2,返回第二個group_id匹配到的結果。

    -- 返回["200","400"] 。
    SELECT REGEXP_EXTRACT_ALL('100-200, 300-400', '(\\d+)-(\\d+)',2);
  • 樣本三:pattern中沒有分組。命令樣本如下:

    • 情境一:pattern中沒有分組且未指定group_id,則返回報錯。在BigQuery相容模式下,則返回滿足整個pattern的子串組成的數組。

      -- FAILED: 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+'); 
    • 情境二:pattern中沒有分組且指定group_id值為0,則返回滿足整個pattern的子串組成的數組。

      -- 返回["100-200","300-200"]。
      SELECT REGEXP_EXTRACT_ALL('100-200, 300-200', '\\d+-\\d+',0);

相關函數

REGEXP_EXTRACT_ALL函數屬於字串函數,更多尋找字串、轉換字串格式的相關函數請參見字串函數。