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

REGEXP_SUBSTR 函数

通过在字符串中搜索正则表达式模式,返回字符串中的字符。REGEXP_SUBSTR 与 SUBSTRING 函数 函数相似,只不过前者可让您在字符串中搜索正则表达式模式。如果函数无法将正则表达式与字符串中的任何字符匹配,则返回一个空字符串。有关正则表达式的更多信息,请参阅 POSIX 运算符

语法

REGEXP_SUBSTR( source_string, pattern [, position [, occurrence [, parameters ] ] ] )

参数

source_string

要搜索的字符串表达式。

pattern

表示正则表达式模式的 UTF-8 字符串文本。有关更多信息,请参阅POSIX 运算符

position

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

出现

一个正整数,指示要使用的模式的匹配项。REGEXP_SUBSTR 会跳过第一个 occurrence -1 匹配项。默认值为 1。如果 occurrence 小于 1 或大于 source_string 中的字符串,则会忽略搜索,并且结果为 NULL。

参数

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

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

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

  • e – 使用子表达式提取子字符串。

    如果 pattern 包含一个子表达式,REGEXP_SUBSTR 会使用 pattern 中的第一个子表达式来匹配子字符串。子表达式是模式中用括号括起的表达式。例如,模式 'This is a (\\w+)' 将第一个表达式与字符串 'This is a ' 后接一个字词进行匹配。此时不返回模式,带 e 参数的 REGEXP_SUBSTR 仅返回子表达式内的字符串。

    REGEXP_SUBSTR 仅考虑第一个子表达式;其他子表达式会被忽略。如果模式没有子表达式,REGEXP_SUBSTR 会忽略“e”参数。

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

返回类型

VARCHAR

示例

以下示例返回电子邮件地址中 @ 字符和域扩展名之间的部分。所查询的 users 数据来自 Amazon Redshift 示例数据。有关更多信息,请参阅示例数据库

SELECT email, regexp_substr(email,'@[^.]*') FROM users ORDER BY userid LIMIT 4; email | regexp_substr -----------------------------------------------+-------------------------- Suspendisse.tristique@nonnisiAenean.edu | @nonnisiAenean amet.faucibus.ut@condimentumegetvolutpat.ca | @condimentumegetvolutpat sed@lacusUtnec.ca | @lacusUtnec Cum@accumsan.com | @accumsan

以下示例使用不区分大小写的匹配返回与字符串 FOX 的第一次出现相对应的输入部分。

SELECT regexp_substr('the fox', 'FOX', 1, 1, 'i'); regexp_substr --------------- fox

以下示例使用不区分大小写的匹配返回与字符串 FOX 的第二次出现相对应的输入部分。结果为 NULL(空),因为没有第二次出现。

SELECT regexp_substr('the fox', 'FOX', 1, 2, 'i'); regexp_substr ---------------

以下示例返回以小写字母开头的输入的第一部分。这在功能上与不带 c 参数的同一 SELECT 语句相同。

SELECT regexp_substr('THE SECRET CODE IS THE LOWERCASE PART OF 1931abc0EZ.', '[a-z]+', 1, 1, 'c'); regexp_substr --------------- abc

以下示例使用用 PCRE 方言编写的模式来定位至少包含一个数字和一个小写字母的单词。它使用 ?= 运算符,它在 PCRE 中具有特定的前瞻含义。此示例返回与第二个此类单词相对应的输入部分。

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

以下示例使用用 PCRE 方言编写的模式来定位至少包含一个数字和一个小写字母的单词。它使用 ?= 运算符,它在 PCRE 中具有特定的前瞻含义。此示例返回与第二个此类单词相对应的输入部分,但与前面的示例不同,因为它使用了不区分大小写的匹配。

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

以下示例使用子表达式,通过不区分大小写的匹配来查找与模式 'this is a (\\w+)' 匹配的第二个字符串。它返回括号内的子表达式。

SELECT regexp_substr( 'This is a cat, this is a dog. This is a mouse.', 'this is a (\\w+)', 1, 2, 'ie'); regexp_substr --------------- dog