REGEXP_MATCHES(source_string, pattern [, flags])
REGEXP_MATCHES()
函数接受三个参数:
1) source
source
是一个要提取与正则表达式匹配的子字符串的字符串。
2) pattern
pattern
是一个用于匹配的 POSIX 正则表达式。
3) flags
flags
参数是控制函数行为的一个或多个字符。例如,i
允许您不区分大小写地进行匹配。
REGEXP_MATCHES()
函数会返回一组文本,即使结果数组仅包含单个元素。
假设您有一个社交网络上的帖子,如下所示:
'Learning #PostgreSQL #REGEXP_MATCHES'
以下语句允许您提取主题标签,例如PostgreSQL
和REGEXP_MATCHES
:
SELECT
REGEXP_MATCHES('Learning #PostgreSQL #REGEXP_MATCHES',
'#([A-Za-z0-9_]+)',
'g');
在此示例中,以下正则表达式匹配以哈希字符 (#
) 开头并后跟任何字母数字字符或下划线 (_
) 的任何单词。
标志参数g
用于全局搜索。
结果如下:
regexp_matches
-----------------
{PostgreSQL}
{REGEX_MATCHES}
(2 rows)
结果集有两行,每行都是一个数组,表示有两个匹配项。
请注意,REGEXP_MATCHES()
将每行作为数组而不是字符串返回。因为如果您使用组来捕获部分文本,则数组将包含组,如下例所示:
SELECT REGEXP_MATCHES('ABC', '^(A)(..)$', 'g');
regexp_matches
----------------
{A,BC}
(1 row)
请查看示例数据库中的film
表,如下:
以下语句使用REGEXP_MATCHES()
函数获取描述中包含单词Cat
或Dog
的电影:
SELECT
film_id,
title ,
description,
REGEXP_MATCHES(description, 'Cat | Dog ') cat_or_dog
ORDER BY title;
这是部分输出:
在本教程中,您学习了如何使用 PostgreSQL 的REGEXP_MATCHES()
函数根据正则表达式提取文本。
PostgreSQL 教程:字符串函数
PostgreSQL 文档:字符串函数和操作符