如何在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.," );
请帮帮我
答案 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以获取有关如何编写此类函数的更多信息。