本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
REGEXP_ COUNT 函数
在字符串中搜索正则表达式模式并返回指示该模式在字符串中出现的次数的整数。如果未找到匹配项,此函数将返回 0。
语法
REGEXP_COUNT ( source_string, pattern [, position [, parameters ] ] )
参数
- source_string
-
要搜索的字符串表达式(如列名称)。
- pattern
-
表示正则表达式模式的字符串文本。
- position
-
指示在 source_string 中开始搜索的位置的正整数。此位置基于字符数而不是字节数,这是为了将多字节字符作为单字符计数。默认值为 1。如果 position 小于 1,则搜索从 source_string 的第一个字符开始。如果 position 大于 source_string 中字符的数量,则结果为 0。
- 参数
-
一个或多个字符串,指示函数与模式的匹配方式。可能的值包括:
-
c – 执行区分大小写的匹配。默认情况下,使用区分大小写的匹配。
-
i – 执行不区分大小写的匹配。
-
p — 使用 Perl 兼容的正则表达式 (PCRE) 方言解释模式。
-
返回类型
整数
示例
以下示例计算三个字母序列出现的次数。
SELECT regexp_count('abcdefghijklmnopqrstuvwxyz', '[a-z]{3}'); regexp_count -------------- 8
以下示例计算顶级域名为 org
或 edu
的次数。
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
下面的示例计算字符串 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