
# regexp_replace
regexp_replace函数用于将source字符串中匹配pattern的子串替换成指定字符串replacement后，返回结果字符串。Spark 4.0版本支持position参数，可指定从第N次匹配开始替换。
#### 命令格式
```
regexp_replace(str, pattern, replacement[, position])
```
#### 参数说明
**表 1** 参数说明
| 参数          | 是否必选 | 参数类型   | 说明                                                                    |
|:---|:---|:---|:---|
| str         | 是    | STRING | 待替换的字符串。                                                              |
| pattern     | 是    | STRING | 正则表达式模式。pattern为空串时返回报错。                                              |
| replacement | 是    | STRING | 将匹配pattern的子串替换为该字符串。                                                 |
| position    | 否    | BIGINT | 指定从第position次匹配开始替换之后的所有匹配。为0或1时替换所有匹配。为其他类型或小于0时，返回报错。默认值为0（替换所有匹配）。 |
   
#### 返回值说明
返回STRING类型的值。
![](https://support.huaweicloud.com/sqlref-spark-aidatalake/public_sys-resources/note_3.0-zh-cn.png)
- 如果pattern为空串，返回报错。
- 当引用不存在的组时，不进行替换。
- 如果replacement值为NULL且pattern有匹配，返回NULL。
- str、pattern或position值为NULL时，返回NULL。
 
#### 示例代码
替换所有匹配，返回num-num。
```
SELECT regexp_replace('100-200', '(\\d+)', 'num');
```
替换所有匹配，返回2222。
```
SELECT regexp_replace('abcd', '[a-z]', '2');
```
从第2次匹配开始替换，返回a222。
```
SELECT regexp_replace('abcd', '[a-z]', '2', 2);
```
从第3次匹配开始替换，返回ab22。
```
SELECT regexp_replace('abcd', '[a-z]', '2', 3);
```
从第4次匹配开始替换，返回abc2。
```
SELECT regexp_replace('abcd', '[a-z]', '2', 4);
```
