将字符串source按照pattern的分组规则进行字符串匹配,返回第groupid个组匹配到的字符串内容。
注意事项
REGEXP_EXTRACT
函数在Hive兼容的数据类型版本中遵循Java regex规范。而在1.0和2.0数据类型版本中,则遵循MaxCompute的规范。
命令格式
string regexp_extract(string <source>, string <pattern>[, bigint <groupid>])
参数说明
source:必填。STRING类型,待拆分的字符串。
pattern:必填。STRING类型常量或正则表达式。待匹配的模型。更多正则表达式编写规范,请参见正则表达式规范。
groupid:可选。BIGINT类型常量,必须大于等于0。
数据以UTF-8格式保存。对于中文字符可以用对应的16进制编码表示,中文字符编码的范围是[\\x{4e00},\\x{9fa5}]。
返回值说明
返回STRING类型。返回规则如下:
如果pattern为空串或pattern中没有分组,返回报错。
groupid非BIGINT类型或小于0时,返回报错。不指定时默认为1,表示返回第一个组。如果groupid等于0,则返回满足整个pattern的子串。
source、pattern或groupid值为NULL时,返回NULL。
使用示例
示例1:将
foothebar
按照foo(.*?)(bar)
拆分。命令示例如下。--返回the。 select regexp_extract('foothebar', 'foo(.*?)(bar)'); --返回foothebar。 select regexp_extract('foothebar', 'foo(.*?)(bar)', 0);
示例2:将
8d99d8
按照8d(\\d+)d8
拆分。命令示例如下。--返回99。在MaxCompute客户端上提交正则计算的SQL,需要使用两个"\"作为转义字符。 select regexp_extract('8d99d8', '8d(\\d+)d8');
示例3:提取
【阿里云】aliyun
中的中文字符及标点。命令示例如下。--返回【阿里云】。 select regexp_extract('【阿里云】aliyun', '([^\\x{00}-\\x{ff}]+)');
示例4:提取
【阿里云】aliyun
中的中文字符。命令示例如下。--返回阿里云。 select regexp_extract('【阿里云】aliyun', '([\\x{4e00}-\\x{9fa5}]+)');
示例5:提取
【阿里云】aliyun阿里云
中的中文字符,该场景较为复杂,无法通过REGEXP_EXTRACT函数实现,需要通过REGEXP_REPLACE函数实现。命令示例如下。--返回【阿里云】阿里云。 select regexp_replace('【阿里云】aliyun阿里云','([\\x{00}-\\x{ff}])', '');
示例6:没有分组。错误命令示例如下:
select regexp_extract('foothebar', 'foothebar');
相关函数
REGEXP_EXTRACT函数属于字符串函数,更多查找字符串、转换字符串格式的相关函数请参见字符串函数。