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函數屬於字串函數,更多尋找字串、轉換字串格式的相關函數請參見字串函數。