- 类别:
REGEXP_REPLACE¶
返回指定模式(或模式的所有匹配项)已被移除或替换为替换字符串的主体。
另请参阅 字符串函数(正则表达式)。
语法¶
REGEXP_REPLACE( <subject> , <pattern> [ , <replacement> , <position> , <occurrence> , <parameters> ] )
实参¶
必填:
subject
用于搜索匹配项的字符串。
pattern
要匹配的模式。
有关指定模式的准则,请参阅 字符串函数(正则表达式)。
可选:
replacement
替换与模式匹配的子字符串的字符串。如果指定了空字符串,则该函数将删除所有匹配的模式并返回生成的字符串。
默认值:
''
(空字符串)。position
函数开始搜索匹配项时,字符串开头的字符数。
默认值:``1``(搜索匹配项时,从左边的第一个字符开始)
occurrence
指定要替换的模式的匹配项。如果指定
0
,则替换所有匹配项。默认值:
0
(所有匹配项)parameters
包含一个或多个字符的字符串,指定用于搜索匹配项的参数。支持的值:
参数
描述
c
区分大小写的匹配
i
不区分大小写的匹配
m
多行模式
e
提取子匹配项
s
POSIX 通配符
.
与\n
匹配默认:
c
有关更多详细信息,请参阅 为正则表达式指定参数。
返回¶
返回类型 VARCHAR 的值。
如果未找到匹配项,则返回原始主体。
如果任何实参为 NULL,则返回 NULL。
使用说明¶
替换字符串可以包含对捕获组(例如,模式的子表达式)的反向引用。捕获组是括在括号 (
( )
) 内的正则表达式。捕获组的最大数量为 9。反向引用与捕获组内的表达式匹配。反向引用的形式为
n
,其中n
是 0 到 9 之间的值(含 0 和 9),它指的是捕获组的匹配实例。有关更多信息,请参阅 `示例`_(本主题内容)。目前,括号 (
( )
) 和方括号 ([ ]
) 必须进行双重转义,才能将它们解析为字面量字符串。以下示例显示了如何移除括号:
SELECT REGEXP_REPLACE('Customers - (NY)','\\(|\\)','') AS customers;
+----------------+ | CUSTOMERS | |----------------| | Customers - NY | +----------------+
有关其他使用说明,请参阅关于正则表达式函数的 一般使用说明。
排序规则详细信息¶
Arguments with collation specifications currently aren't supported.
示例¶
以下示例将字符串中的所有空格替换为空(即移除所有空格):
SELECT REGEXP_REPLACE('It was the best of times, it was the worst of times',
'( ){1,}',
'') AS result;
+------------------------------------------+
| RESULT |
|------------------------------------------|
| Itwasthebestoftimes,itwastheworstoftimes |
+------------------------------------------+
以下示例匹配字符串 times
并将其替换为字符串 days
。匹配从字符串中的第一个字符开始,并替换子字符串的第二个匹配项:
SELECT REGEXP_REPLACE('It was the best of times, it was the worst of times',
'times',
'days',
1,
2) AS result;
+----------------------------------------------------+
| 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;
+--------------------------------+
| NAME_SORT |
|--------------------------------|
| lastname, firstname middlename |
+--------------------------------+