PL / pgSQL中的正则表达式替换

时间:2010-05-03 05:23:59

标签: regex postgresql triggers plpgsql

如果我有以下输入(不包括引号):

"The ancestral   territorial      imperatives of the    trumpeter swan"

如何将所有多个空格折叠到单个空格,以便将输入转换为:

"The ancestral territorial imperatives of the trumpeter swan"

这将在插入/更新(已经修剪前导/尾随空格)的触发器函数中使用。目前,如果输入包含多个相邻的空格,它会引发异常,但我宁愿在插入之前将其简单地转换为有效的内容。

最好的方法是什么?我似乎无法找到PL / pgSQL的正则表达式替换函数。有一个text_replace函数,但这只会折叠最多两个空格到一个(意味着三个连续的空格将折叠为两个)。一遍又一遍地调用此功能并不理想。

2 个答案:

答案 0 :(得分:2)

PostgreSQL有一个REGEXP_REPLACE函数,您应该可以使用它。

DECLARE
  result VARCHAR2(255);
BEGIN
  result := REGEXP_REPLACE(subject, $$ {2,}$$, $$ $$, 'g');
END;

答案 1 :(得分:0)

您可以使用plperl,并使用perl正则表达式。

升级很好,但是plperl可以让你再刮一点。