postgresql正则表达式仅替换第一个匹配项

时间:2012-11-07 04:44:20

标签: regex postgresql

努力了解如何在postgresql中制作regexp_match字符串函数的行为符合我的要求。我有一个字符串,我想用一个空格替换多个空格的任何实例。所以例如

'mitt     romney'

成为

'mitt romney'

我相信以下代码应该有效:

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

预期结果将是

'This is a test'` 

但是我回来了

'This is a     test'`.  

好像替换只是替换了第一场比赛。有谁知道如何解决这个问题?

由于

2 个答案:

答案 0 :(得分:8)

我不认为这很奇怪,看起来就像它记录的那样: http://www.postgresql.org/docs/9.1/static/functions-matching.html#FUNCTIONS-POSIX-REGEXP

  

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

重点,我自己。

答案 1 :(得分:4)

regexp_replace函数中有第四个可选参数,具体时会产生所需的行为。

如果我这样做

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

我得到了理想的结果。