
# regexp_replace
根据Spark版本不同，regexp_replace函数的功能略有差异：
- Spark2.4.5版本及以前版本：regexp_replace函数用于将source字符串中匹配pattern的子串替换成指定字符串replace_string后，返回结果字符串。
- Spark3.1.1版本：regexp_replace函数用于将source字符串中第occurrence次匹配pattern的子串，以及之后匹配pattern的子串，全都替换成指定字符串replace_string后，返回结果字符串。
 
相似函数：[regexp_replace1](https://support.huaweicloud.com/sqlref-spark-dli/dli_spark_regexp_replace1.html)，regexp_replace1函数用于将source字符串中第occurrence次匹配pattern的子串，替换成指定字符串replace_string后，返回结果字符串。但egexp_replace1函数仅适用于Spark2.4.5版本及以前版本。
即Spark2.4.5版适用的函数：regexp_replace1函数支持指定occurrence，但是regexp_replace函数不支持指定occurrence。
#### 命令格式
- spark2.4.5及以前版本
  ```
  regexp_replace(string <source>, string <pattern>, string <replace_string>)
  ```
  
 
- spark3.1.1版本
  ```
  regexp_replace(string <source>, string <pattern>, string <replace_string>[, bigint <occurrence>])
  ```
  
#### 参数说明
表1参数说明 
| 参数             | 是否必选 | 参数类型   | 说明                                                                                                                                                                                                                                                            |
|:---|:---|:---|:---|
| source         | 是    | STRING | 待替换的字符。                                                                                                                                                                                                                                                       |
| pattern        | 是    | STRING | STRING类型常量或正则表达式。待匹配的模型。更多正则表达式编写规范，请参见正则表达式规范。pattern为空串时返回报错。                                                                                                                                                                                               |
| replace_string | 是    | STRING | 将匹配pattern的字符串替换后的字符串。                                                                                                                                                                                                                                        |
| occurrence     | 否    | BIGINT | 必须大于等于1，表示将第occurrence次匹配的字符串替换为replace_string，为1时表示替换所有匹配的子串。为其他类型或小于1时，返回报错。默认值为1。 说明： 该字段仅Spark3.1.1版本的功能适用。 |
   
#### 返回值说明
返回STRING类型的值。
![](https://support.huaweicloud.com/sqlref-spark-dli/public_sys-resources/note_3.0-zh-cn.png)
- 如果pattern为空串或pattern中没有分组，返回报错。
- 当引用不存在的组时，不进行替换。
- 如果replace_string值为NULL且pattern有匹配，返回NULL。
- 如果replace_string值为NULL但pattern不匹配，返回NULL。
- source、pattern或occurrence值为NULL时，返回NULL。
 
#### 示例代码
- 适用于spark2.4.5及以前版本示例 返回 num-num。
  ```
  SELECT regexp_replace('100-200', '(\\d+)', 'num');
  ```
  
 
- 适用于spark3.1.1版本示例。 返回 2222。
  ```
  select regexp_replace('abcd', '[a-z]', '2');
  ```
  返回 2222。
  ```
  select regexp_replace('abcd', '[a-z]', '2', 1);
  ```
  返回 a222。
  ```
  select regexp_replace('abcd', '[a-z]', '2', 2);
  ```
  返回 ab22。
  ```
  select regexp_replace('abcd', '[a-z]', '2', 3);
  ```
  返回 abc2。
  ```
  select regexp_replace('abcd', '[a-z]', '2', 4);
  ```
  
 
