
# regexp_extract
REGEXP_EXTRACT函数用于将字符串source按照pattern的分组规则进行字符串匹配，返回第groupid个组匹配到的字符串内容。
#### 命令格式
regexp_extract(string \<source\>, string \<pattern\>\[, bigint \<groupid\>\])
#### 参数说明
表1参数说明 
| 参数      | 是否必选 | 参数类型   | 说明                       |
|:---|:---|:---|:---|
| source  | 是    | STRING | 待拆分的字符串。                 |
| pattern | 是    | STRING | STRING类型常量或正则表达式。待匹配的模型。 |
| groupid | 否    | BIGINT | BIGINT类型常量，必须大于等于0。      |
   
#### 返回值说明
返回STRING类型。
![](https://support.huaweicloud.com/sqlref-spark-dli/public_sys-resources/note_3.0-zh-cn.png)
- 如果pattern为空串或pattern中没有分组，返回报错。
- groupid非BIGINT类型或小于0时，返回报错。
- 不指定时默认为1，表示返回第一个组。
- 如果groupid等于0，则返回满足整个pattern的子串。
- source、pattern或groupid值为NULL时，返回NULL。
 
#### 示例代码
将 basketball 按照 bas(.\*?)(ball) 拆分。返回ket。
```
select regexp_extract('basketball', 'bas(.*?)(ball)');
```
返回 basketball 。
```
select regexp_extract('basketball', 'bas(.*?)(ball)',0);
```
返回99。在DLI上提交正则计算的SQL，需要使用两个"\\"作为转义字符。
```
select regexp_extract('8d99d8', '8d(\\d+)d8');
```
返回【你好】。
```
select regexp_extract('【你好】hello', '([^\\x{00}-\\x{ff}]+)');
```
返回你好。
```
select regexp_extract('【你好】hello', '([\\x{4e00}-\\x{9fa5}]+)');
```
