PostgreSQL中的regexp_replace Unicode

时间:2011-08-09 07:05:57

标签: regex postgresql unicode

如何在PostgreSQL中使用regexp_replace for Unicode

我读了这个http://www.regular-expressions.info/unicode.html

select regexp_replace('s4y8sds', '\\p{Number}', '')

select regexp_replace('s4y8sds', '\\p{N}', '')

但没有工作

我在PHP中有以下代码工作

preg_replace( "/[^\p{Ll}|\p{Lm}|\p{Lo}|\p{Lt}|\p{Lu}|\p{Zs}]/u", "", "string1212.," );

请帮帮我

1 个答案:

答案 0 :(得分:3)

对于普通数字,使用digit字符类作为[[:digit:]]或速记\d

SELECT regexp_replace('s4y8sds', $$\d+$$, '', 'g');

结果:

 regexp_replace
----------------
 sysds
(1 row)

对于其他数字(例如¼)并不那么简单,更确切地说,documentation表示它的ctype(语言环境)依赖:

  

在括号表达式中,括起来的字符类的名称   [:和:]代表属于该字符的所有字符的列表   类。标准字符类名称是:alnum,alpha,blank,cntrl,   数字,图形,低,打印,punct,空间,上部,xdigit。这些立场   对于在ctype中定义的字符类。区域设置可以提供   其他

但是,您可以使用内部PL / Perl过程语言,并将服务器端函数写入所需的Unicode字符类\p{}

CREATE OR REPLACE FUNCTION removeNumbersUnicode(text)
RETURNS text AS $$
    $s = $_[0];
    $s =~ s/\p{N}//g;
    return $s;
$$ LANGUAGE plperl;

从doc查看Chapter 41以获取有关如何编写此类函数的更多信息。