适用于:
Databricks SQL
Databricks Runtime
提取与 str 表达式匹配且对应于 regexp 组索引的 regex 中的第一个字符串。
语法
regexp_extract(str, regexp [, idx] )
参数
-
str:匹配的STRING表达式。 -
regexp:具有匹配模式的STRING表达式。 -
idx:大于或等于 0 的可选整数表达式,默认值为 1。
返回
一个 STRING。
如果str,regexp或idx为NULL结果。NULL
如果 regexp 不匹配任何部分 str,则结果为空字符串。
如果总体模式匹配,但指定的 idx 组未参与匹配,则结果为空字符串。
regexp 字符串必须是Java正则表达式。 有关支持的语法,请参阅 Java 正则表达式模式。
使用文本时,请使用raw-literal(r 前缀)来避免转义字符预处理。
regexp 可以包含多个组。 捕获组通过将模式的一部分括在括号 (...)中来定义。
idx 指示要提取哪个正则表达式组。
idx 为 0 则表示匹配整个正则表达式。
默认值 idx 为 1,表示省略时 idx 返回第一个捕获组。
如果 idx 大于在中 regexp定义的捕获组数,Databricks 将引发错误。
仅考虑第一个 regexp 匹配 str 项。 若要提取所有匹配项,请使用 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