2

努力了解如何使 postgresql 中的 regexp_match 字符串函数按照我想要的方式运行。我有一个字符串,我想用一个空格替换多个空格的任何实例。所以例如

'mitt     romney'

变成

'mitt romney'

我相信以下代码应该可以工作:

SELECT regexp_replace('This      is a    test', '[ ]+', ' ');

预期的结果是

'This is a test'` 

但相反我回来了

'This is a     test'`.  

好像替换只是替换第一个匹配项。有谁知道如何解决这个问题?

谢谢

4

2 回答 2

8

我不认为这很奇怪,在我看来它已记录在案: http ://www.postgresql.org/docs/9.1/static/functions-matching.html#FUNCTIONS-POSIX-REGEXP

flags 参数是一个可选的文本字符串,包含零个或多个更改函数行为的单字母标志。标志 i 指定不区分大小写的匹配,而标志 g 指定替换每个匹配的子字符串,而不仅仅是第一个

强调,我自己的。

于 2012-11-07T04:48:40.353 回答
5

regexp_replace 函数中有第四个可选参数,当指定时,它会产生所需的行为。

如果我做

regexp_replace('This      is    a        test`, '[ ]+', ' ', 'g')

我得到了想要的结果。

于 2012-11-07T04:51:26.827 回答