適用於:
Databricks SQL
Databricks Runtime
擷取 str 中符合 regexp 運算式的第一個字串,並對應至 regex 群組索引。
語法
regexp_extract(str, regexp [, idx] )
引數
-
strSTRING:要比對的表達式。 -
regexpSTRING:具有相符模式的表達式。 -
idx:選擇性整數數表達式大於或等於0,預設值為1。
傳回
STRING。
若 str、 regexp或 idx , NULL則結果為 NULL。
若 regexp 與 中任何部分 str不匹配,則結果為空字串。
若整體模式相符,但指定的 idx 群組未參與匹配,則結果為空字串。
regexp字串必須是Java正則表達式。 請參見 Java 正則表達式模式 以了解所支援的語法。
使用常值時,請使用 raw-literal (r prefix) 以避免逸出字元前置處理。
regexp 可能包含多個群組。 捕獲群的定義是將模式的一部分包圍在括號 (...)中。
idx 表示要擷取的 regex 群組。
idx 0 表示比對整個正則表達式。
預設值 idx 為 1,表示省 idx 略時會返回第一個捕獲群組。
若 idx 大於 中 regexp定義的擷取群組數量,Databricks 會產生錯誤。
只考慮 的regexpstr第一個匹配。 要提取所有配對,請使用 regexp_extract_all。
常見錯誤條件
範例
擷取特定擷取群
> SELECT regexp_extract('100-200', '(\\d+)-(\\d+)', 1);
100
> SELECT regexp_extract('100-200', '(\\d+)-(\\d+)', 2);
200
用 idx 0 回回整場比賽
> SELECT regexp_extract('Order: 100-200', '(\\d+)-(\\d+)', 0);
100-200
預設的 idx 是 1
若 idx 省略 ,則返回第一個捕獲群。
> SELECT regexp_extract('abc123def', '([a-z]+)(\\d+)');
abc
沒有匹配回傳空字串
> SELECT regexp_extract('hello world', '(\\d+)', 1);
NULL 輸入回傳 NULL
> SELECT regexp_extract(NULL, '(\\d+)', 1);
NULL
使用純字串字面值以避免雙重逃脫
在一般 SQL 字串中,反斜線必須加倍(\\d 表示 \d)。 用 r 字串字面的前綴來寫出更自然的模式。
> SELECT regexp_extract('abc123', r'(\d+)', 1);
123
從 URL 中擷取網域
> SELECT regexp_extract('https://www.databricks.com/product', r'https?://([^/]+)', 1);
www.databricks.com
從日期字串中擷取元件
> SELECT regexp_extract('Event on 2024-03-15', r'(\d{4})-(\d{2})-(\d{2})', 0);
2024-03-15
> SELECT regexp_extract('Event on 2024-03-15', r'(\d{4})-(\d{2})-(\d{2})', 2);
03
可選的吃子組,不參加比賽
當某群是可選且不匹配時,該群會回傳一個空字串。
> SELECT regexp_extract('ac', r'(a)(b)?(c)', 2);
無效的正則表達式模式
> SELECT regexp_extract('abc', '[invalid', 0);
Error: INVALID_PARAMETER_VALUE.PATTERN