REGEXP_REPLACE 函数 - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

REGEXP_REPLACE 函数

在字符串中搜索正则表达式模式并将该模式的每个匹配项替换为指定字符串。REGEXP_REPLACE 与 REPLACE 函数相似,只不过前者可让您在字符串中搜索正则表达式模式。有关正则表达式的更多信息,请参阅 POSIX 运算符

REGEXP_REPLACE 与 TRANSLATE 函数REPLACE 函数相似,只不过 TRANSLATE 进行多次单字符替换,REPLACE 一次性将整个字符串替换为其他字符串,而 REGEXP_REPLACE 可让您在字符串中搜索正则表达式模式。

Syntax

REGEXP_REPLACE ( source_string, pattern [, replace_string [ , position [, parameters ] ] ] )

Arguments

source_string

要搜索的字符串表达式(如列名称)。

pattern

表示 SQL 标准正则表达式模式的字符串文本。

replace_string

将替换模式的每个匹配项的字符串表达式(如列名称)。默认值是空字符串 ("")。

position

指示在 source_string 中开始搜索的位置的正整数。此位置基于字符数而不是字节数,这是为了将多字节字符作为单字符计数。默认值为 1。如果 position 小于 1,则搜索从 source_string 的第一个字符开始。如果 position 大于 source_string 中的字符数量,则结果为 source_string

参数

一个或多个字符串,指示函数与模式的匹配方式。可能的值包括:

  • c – 执行区分大小写的匹配。默认情况下,使用区分大小写的匹配。

  • i – 执行不区分大小写的匹配。

  • p – 使用 Perl 兼容正则表达式 (PCRE) 方言解释模式。

返回类型

VARCHAR

如果 patternreplace_string 为 NULL,则返回 NULL。

Example

以下示例删除电子邮件地址中的 @ 和域名。

SELECT email, regexp_replace(email, '@.*\\.(org|gov|com|edu|ca)$') FROM users ORDER BY userid LIMIT 4; email | regexp_replace -----------------------------------------------+---------------- Etiam.laoreet.libero@sodalesMaurisblandit.edu | Etiam.laoreet.libero Suspendisse.tristique@nonnisiAenean.edu | Suspendisse.tristique amet.faucibus.ut@condimentumegetvolutpat.ca | amet.faucibus.ut sed@lacusUtnec.ca | sed

以下示例将使用此值替换电子邮件地址的域名:internal.company.com

SELECT email, regexp_replace(email, '@.*\\.[[:alpha:]]{2,3}', '@internal.company.com') FROM users ORDER BY userid LIMIT 4; email | regexp_replace -----------------------------------------------+-------------------------------------------- Etiam.laoreet.libero@sodalesMaurisblandit.edu | Etiam.laoreet.libero@internal.company.com Suspendisse.tristique@nonnisiAenean.edu | Suspendisse.tristique@internal.company.com amet.faucibus.ut@condimentumegetvolutpat.ca | amet.faucibus.ut@internal.company.com sed@lacusUtnec.ca | sed@internal.company.com

下面的示例使用不区分大小写的匹配替换值 quick brown fox 内的字符串 FOX 的所有出现次数。

SELECT regexp_replace('the fox', 'FOX', 'quick brown fox', 1, 'i'); regexp_replace --------------------- the quick brown fox

以下示例使用用 PCRE 方言编写的模式来定位至少包含一个数字和一个小写字母的单词。它使用 ?= 运算符,它在 PCRE 中具有特定的前瞻含义。此示例将此单词的每次出现替换为值 [hidden]

SELECT regexp_replace('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', '[hidden]', 1, 'p'); regexp_replace ------------------------------- [hidden] plain A1234 [hidden]

以下示例使用用 PCRE 方言编写的模式来定位至少包含一个数字和一个小写字母的单词。它使用 ?= 运算符,它在 PCRE 中具有特定的前瞻含义。此示例将此单词的每次出现替换为值 [hidden],但与前面的示例不同,它使用不区分大小写的匹配。

SELECT regexp_replace('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', '[hidden]', 1, 'ip'); regexp_replace ---------------------------------- [hidden] plain [hidden] [hidden]