- 类别:
REGEXP_REPLACE¶
返回指定模式(或模式的所有匹配项)已被移除或替换为替换字符串的主体。如果未找到匹配项,则返回原始主体。
另请参阅 字符串函数(正则表达式)。
语法¶
REGEXP_REPLACE( <subject> , <pattern> [ , <replacement> , <position> , <occurrence> , <parameters> ] )
实参¶
必填:
subject
以匹配为准。
pattern
要匹配的模式。
可选:
replacement
替换与模式匹配的子字符串的字符串。如果指定了空字符串,则该函数将删除所有匹配的模式并返回生成的字符串。
默认值:
''
(空字符串)。position
函数开始搜索匹配项时,字符串开头的字符数。
默认值:
1
(搜索匹配项时,从左边的第一个字符开始)occurrence
指定要替换的模式的匹配项。如果指定
0
,则替换所有匹配项。默认值:
0
(所有匹配项)parameters
包含一个或多个字符的字符串,指定用于搜索匹配项的参数。支持的值:
c
、i
、m
、e
、s
有关更多详细信息,请参阅 正则表达式参数。
默认:
c
使用说明¶
替换字符串可以包含对捕获组(即模式的子表达式)的反向引用。捕获组是括在括号 (
( )
) 内的正则表达式。捕获组的最大数量为 9。反向引用与捕获组内的表达式匹配。反向引用的形式为
n
,其中n
是 0 到 9 之间的值(含 0 和 9),它指的是捕获组的匹配实例。有关详细信息,请参阅 示例 (本主题内容)。目前,括号 (
( )
) 和方括号 ([ ]
) 必须进行双重转义,才能将它们解析为字面量字符串。以下示例显示了如何移除括号:
SELECT REGEXP_REPLACE('Customers - (NY)','\\(|\\)','') AS customers; +----------------+ | CUSTOMERS | |----------------| | Customers - NY | +----------------+
有关其他使用说明,请参阅关于正则表达式函数的 一般使用说明。
排序规则详细信息¶
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 |
+------------------------------------------+
以下示例匹配字符串 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 |
+----------------------------------------------------+
以下示例使用反向引用将字符串 firstname middlename lastname
重新排列为 lastname, firstname middlename
并在 lastname
和 firstname
之间插入逗号:
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 |
+---------------------------------------------------------------------------------+