regexp_replace() 与 replace() 替换字符串中的所有匹配项

Fra*_*urt 3 postgresql pattern-matching replace

默认情况下,在 PostgreSQL 中,regexp_replace()替换字符串中第一次出现的子字符串,同时replace()替换字符串中所有出现的子字符串。为什么默认行为不同?

(我知道regexp_replace可以使用该g选项替换字符串中所有出现的子字符串。)

例子:

SELECT regexp_replace('hello world', 'o', 'z');  -- returns "hellz world"
SELECT regexp_replace('hello world', 'o', 'z', 'g'); -- returns "hellz wzrld"
SELECT replace('hello world', 'o', 'z'); -- returns: "hellz wzrld"
Run Code Online (Sandbox Code Playgroud)

Erw*_*ter 6

为什么?

因为 Postgresreplace()是一个标准的 SQL 函数,它的工作方式与其他 RDBMS 中的相同。示例:replace()在 SQL Server 中:

用另一个字符串值替换所有出现的指定字符串值。

虽然regexp_replace()用于...

替换匹配 POSIX 正则表达式的子字符串。

正则表达式的处理显然受 POSIX 标准的指导,并且与实现它的其他工具相同。手册:

POSIX 正则表达式提供了比LIKEandSIMILAR TO运算符更强大的模式匹配方法。许多 Unix 工具(例如egrepsed、 或 )awk使用与此处描述的语言类似的模式匹配语言。