REGEXP_COUNT 函数 - Amazon Redshift

REGEXP_COUNT 函数

在字符串中搜索正则表达式模式,并返回指示指定模式在字符串中出现的次数的整数。如果未找到匹配项,此函数将返回 0。有关正则表达式的更多信息,请参阅 POSIX 运算符和 Wikipedia 中的 Regular expression

语法

REGEXP_COUNT( source_string, pattern [, position [, parameters ] ] )

参数

source_string

CHARVARCHAR 字符串。

pattern

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

position

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

参数

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

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

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

  • p – 使用 Perl 兼容正则表达式 (PCRE) 方言解释模式。有关 PCRE 的更多信息,请参阅 Wikipedia 中的 Perl Compatible Regular Expressions

返回类型

INTEGER

示例

要计算三个字母序列出现的次数,请使用以下示例。

SELECT REGEXP_COUNT('abcdefghijklmnopqrstuvwxyz', '[a-z]{3}'); +--------------+ | regexp_count | +--------------+ | 8 | +--------------+

要使用不区分大小写的匹配计算字符串 FOX 的出现次数,请使用以下示例。

SELECT REGEXP_COUNT('the fox', 'FOX', 1, 'i'); +--------------+ | regexp_count | +--------------+ | 1 | +--------------+

要使用以 PCRE 方言编写的模式来定位至少包含一个数值和一个小写字母的单词,请使用以下示例。此示例使用 ?= 运算符,它在 PCRE 中具有特定的前瞻含义。此示例使用区分大小写的匹配计算此类单词的出现次数。

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

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

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

以下示例使用 TICKIT 示例数据库的 USERS 表中的数据。有关更多信息,请参阅 示例数据库

要计算顶级域名为 orgedu 的次数,请使用以下示例。

SELECT email, REGEXP_COUNT(email,'@[^.]*\.(org|edu)') FROM users ORDER BY userid LIMIT 4; +-----------------------------------------------+--------------+ | email | regexp_count | +-----------------------------------------------+--------------+ | Etiam.laoreet.libero@sodalesMaurisblandit.edu | 1 | | Suspendisse.tristique@nonnisiAenean.edu | 1 | | amet.faucibus.ut@condimentumegetvolutpat.ca | 0 | | sed@lacusUtnec.ca | 0 | +-----------------------------------------------+--------------+