regexp_extract函式

適用於:核取記號為「是」Databricks SQL 核取記號為「是」Databricks Runtime

擷取 str 中符合 regexp 運算式的第一個字串,並對應至 regex 群組索引。

語法

regexp_extract(str, regexp [, idx] )

引數

  • str STRING:要比對的表達式。
  • regexp STRING:具有相符模式的表達式。
  • idx:選擇性整數數表達式大於或等於0,預設值為1。

傳回

STRING

strregexpidxNULL則結果為 NULL。 若 regexp 與 中任何部分 str不匹配,則結果為空字串。 若整體模式相符,但指定的 idx 群組未參與匹配,則結果為空字串。

regexp字串必須是Java正則表達式。 請參見 Java 正則表達式模式 以了解所支援的語法。

使用常值時,請使用 raw-literalr 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