PostgreSQL 教程: regexp_replace 函数

九月 17, 2023

摘要:在本教程中,您将学习如何使用 PostgreSQL 的REGEXP_REPLACE()函数来替换与正则表达式匹配的字符串。

PostgreSQL 的REGEXP_REPLACE()函数,用新的子字符串替换与 POSIX 正则表达式匹配的子字符串。

请注意,如果您想执行简单的字符串替换,可以使用REPLACE()函数。

语法

PostgreSQL 的REGEXP_REPLACE()函数的语法如下:

REGEXP_REPLACE(source, pattern, replacement_string,[, flags])

参数

REGEXP_REPLACE()函数接受四个参数:

1) source

source是一个应该进行替换的字符串。

2) pattern

pattern是一个 POSIX 正则表达式,用于匹配应替换的子字符串。

3) replacement_string

replacement_string是一个字符串,用于替换与正则表达式模式匹配的子字符串。

4) flags

flags参数是一个或多个控制函数匹配行为的字符,例如,i允许不区分大小写的匹配,n允许匹配任何字符以及换行符。

返回值

PostgreSQL 的REGEXP_REPLACE()函数返回一个新字符串,其中与正则表达式模式匹配的子字符串,被替换为新的子字符串。

示例

让我们看一些示例来了解REGEXP_REPLACE()函数的工作原理。

A) 名称重新排列

假设您有一个以下格式的人名:

first_name last_name

例如,John Doe

并且出于报告目的,您希望按如下方式重新排列此名称。

last_name, first_name

为此,您可以使用REGEXP_REPLACE()函数,如下所示:

SELECT REGEXP_REPLACE('John Doe','(.*) (.*)','\2, \1');

该语句的输出是:

'Doe, John'

B) 字符串移除

假设您有混合了字母和数字的字符串数据,如下所示:

ABC12345xyz

以下语句从源字符串中删除所有字母,例如 A、B、C 等:

SELECT REGEXP_REPLACE('ABC12345xyz','[[:alpha:]]','','g');

输出是:

'12345'

在这个例子中,

  • [[:alpha:]] 匹配任何字母
  • ''是替换字符串
  • 'g'指示函数删除所有字母,而不仅仅是第一个字母。

同样,您可以使用以下语句删除源字符串中的所有数字:

SELECT REGEXP_REPLACE('ABC12345xyz','[[:digit:]]','','g');

输出是:

'ABCxyz'

C) 删除多余空格

以下示例删除字符串中多次出现的不需要的空格。

SELECT REGEXP_REPLACE('This  is    a   test   string','( ){2,}',' ');

下图说明了输出:

PostgreSQL REGEXP_REPLACE Example

在本教程中,您学习了如何使用 PostgreSQL 的REGEXP_REPLACE()函数,将与正则表达式匹配的子字符串替换为新的子字符串。