类别:

字符串函数(正则表达式)

REGEXP_REPLACE

返回指定模式(或模式的所有匹配项)已被移除或替换为替换字符串的主体。如果未找到匹配项,则返回原始主体。

另请参阅 字符串函数(正则表达式)

语法

REGEXP_REPLACE( <subject> , <pattern> [ , <replacement> , <position> , <occurrence> , <parameters> ] )
Copy

实参

必填:

subject

以匹配为准。

pattern

要匹配的模式。

可选:

replacement

替换与模式匹配的子字符串的字符串。如果指定了空字符串,则该函数将删除所有匹配的模式并返回生成的字符串。

默认值:'' (空字符串)。

position

函数开始搜索匹配项时,字符串开头的字符数。

默认值:1 (搜索匹配项时,从左边的第一个字符开始)

occurrence

指定要替换的模式的匹配项。如果指定 0,则替换所有匹配项。

默认值:0 (所有匹配项)

parameters

包含一个或多个字符的字符串,指定用于搜索匹配项的参数。支持的值:

cimes

有关更多详细信息,请参阅 正则表达式参数

默认:c

使用说明

  • 替换字符串可以包含对捕获组(即模式的子表达式)的反向引用。捕获组是括在括号 (( )) 内的正则表达式。捕获组的最大数量为 9。

    反向引用与捕获组内的表达式匹配。反向引用的形式为 n,其中 n 是 0 到 9 之间的值(含 0 和 9),它指的是捕获组的匹配实例。有关详细信息,请参阅 示例 (本主题内容)。

  • 目前,括号 (( )) 和方括号 ([ ]) 必须进行双重转义,才能将它们解析为字面量字符串。

    以下示例显示了如何移除括号:

    SELECT REGEXP_REPLACE('Customers - (NY)','\\(|\\)','') AS customers;
    
    +----------------+
    | CUSTOMERS      |
    |----------------|
    | Customers - NY |
    +----------------+
    
    Copy
  • 有关其他使用说明,请参阅关于正则表达式函数的 一般使用说明

排序规则详细信息

Arguments with collation specifications are currently not supported.

示例

以下示例将字符串中的所有空格替换为空(即移除所有空格):

select regexp_replace('It was the best of times, it was the worst of times', '( ){1,}','') as "result" from dual;

+------------------------------------------+
| result                                   |
|------------------------------------------|
| Itwasthebestoftimes,itwastheworstoftimes |
+------------------------------------------+
Copy

以下示例匹配字符串 times 并将其替换为字符串 days。匹配从字符串中的第 1 个字符开始,并替换子字符串的第二个匹配项:

select regexp_replace('It was the best of times, it was the worst of times', 'times','days',1,2) as "result" from dual;

+----------------------------------------------------+
| result                                             |
|----------------------------------------------------|
| It was the best of times, it was the worst of days |
+----------------------------------------------------+
Copy

以下示例使用反向引用将字符串 firstname middlename lastname 重新排列为 lastname, firstname middlename 并在 lastnamefirstname 之间插入逗号:

select regexp_replace('firstname middlename lastname','(.*) (.*) (.*)','\\3, \\1 \\2') as "name sort" from dual;

+---------------------------------------------------------------------------------+
| REGEXP_REPLACE('FIRSTNAME MIDDLENAME LASTNAME','(.*) (.*) (.*)','\\3, \\1 \\2') |
|---------------------------------------------------------------------------------|
| lastname, firstname middlename                                                  |
+---------------------------------------------------------------------------------+
Copy
语言: 中文