PostgreSQL 教程: regexp_matches 函数

九月 17, 2023

PostgreSQL 的REGEXP_MATCHES()函数将正则表达式与字符串进行匹配,并返回匹配的子字符串。

语法

下面说明了 PostgreSQL 的REGEXP_MATCHES()函数的语法:

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'

以下语句允许您提取主题标签,例如PostgreSQLREGEXP_MATCHES

SELECT
    REGEXP_MATCHES('Learning #PostgreSQL #REGEXP_MATCHES',
         '#([A-Za-z0-9_]+)',
        'g');

在此示例中,以下正则表达式匹配以哈希字符 (#) 开头并后跟任何字母数字字符或下划线 (_) 的任何单词。

#([A-Za-z0-9_]+)

标志参数g用于全局搜索。

结果如下:

regexp_matches
-----------------
 {PostgreSQL}
 {REGEX_MATCHES}
(2 rows)

结果集有两行,每行都是一个数组,表示有两个匹配项。

请注意,REGEXP_MATCHES()将每行作为数组而不是字符串返回。因为如果您使用组来捕获部分文本,则数组将包含组,如下例所示:

SELECT REGEXP_MATCHES('ABC', '^(A)(..)$', 'g');

结果是:

regexp_matches
----------------
 {A,BC}
(1 row)

请查看示例数据库中的film表,如下:

img

以下语句使用REGEXP_MATCHES()函数获取描述中包含单词CatDog的电影:

SELECT
	film_id,
	title ,
	description,
	REGEXP_MATCHES(description, 'Cat | Dog ') cat_or_dog
FROM
	film
ORDER BY title;

这是部分输出:

img

在本教程中,您学习了如何使用 PostgreSQL 的REGEXP_MATCHES()函数根据正则表达式提取文本。