regexp_replace Unicode в PostgreSQL - PullRequest
       1

regexp_replace Unicode в PostgreSQL

2 голосов
/ 09 августа 2011

Как regexp_replace для Unicode в PostgreSQL

я прочитал это 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 Ответ

3 голосов
/ 09 августа 2011

Для обычных чисел используйте digit класс символов как [[:digit:]] или сокращение \d:

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

Результат:

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

Для других чисел (например, ¼) не все так просто, точнее, поскольку документация говорит, что это зависит от ctype (locale):

В выражении в скобках имя класса символов, заключенное в [: and:] обозначает список всех символов, принадлежащих этому учебный класс. Стандартные имена классов символов: alnum, alpha, blank, cntrl, цифра, график, нижний, печать, пункт, пробел, верхний, 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;

Проверьте Глава 41 из документа doc для получения дополнительной информации о том, как писать такие функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...