Работает ли [:ascii:]
класс в Postgres вообще? Это не указано в их справке , однако я вижу примеры в Интернете, которые его используют.
У меня есть база данных UTF-8, где находятся параметры сортировки и c_typ e en_US.UTF-8
, а версия Postgres - 9.6.2. Когда я ищу не-ASCII строки, как это:
select title from wallabag_entry where title ~ '[^[:ascii:]]';
Я получаю как Unicode и не Unicode символы (полный выход здесь ):
Сталинская правозащитница: мать Меленкова бабушка Настя
Дневник НКВДиста Шабалина: Знает ли Москва положение на фронте?
Бег по городу и поездка на осле: как в средневековье наказывали прелюбодеев
Как комиссар Крекшин в 1740-е чуть не отменил историю России
Have you heard of Saint Death? Don’t pray to her.
Архаїчна українська мова: перевага чи недолік?
Гренада не их
China’s marriage rate is plummeting because women are choosing autonomy over
Что не так с этим запросом?
postgresql
utf-8
regular-expression
unicode
regex
Suncatcher
источник
источник
regexp_replace()
чтобы пометить ваши символы не ASCII. Смотри мой ответ.[:ascii:]
любом случае делают невозможным использование классов. Что действительно помогло мне в этой проблеме, так это концепция блоков Юникода, которую я выучил из этого невероятного регулярного выражения учебник .Ответы:
Ответить на ваш вопрос:
[:ascii:]
работает. В вашем тексте могут быть символы, которые вы не можете распознать как не ASCII , но они есть. Они могут быть чем-то вроде неразрывного пространства , например, или любым другим символом пробела Unicode .Это не странно иметь неразрывные пробелы (
) в текстах, которые вы копируете и вставляете с веб-страницы, но вы не замечаете, что они есть.Вот пример, чтобы показать:
Вот что вы получаете:
Из этого видно, что ваша проблема заключается в символ правильного апострофа . ASCII поддерживает только апостроф. Левый апостроф и правый апостроф являются типографски правильными расширениями Юникода.
dbfiddle здесь
Вы также можете проверить это с предыдущими версиями на http://rextester.com/UKIQ48014 (PostgreSQL 9.5) и http://sqlfiddle.com/#!15/4c563/1/0 (PostgreSQL 9.3)
Тексты, которые, я думаю, вы считаете чистым ASCII, а не :
dbfiddle здесь
Эти тексты используют « вместо » для обозначения апострофов.
Проверьте пунктуацию: почему правильная одинарная кавычка (U + 2019), а не семантически отдельный апостроф (U + 0027), является предпочтительным символом апостроф в Юникоде? ... чтобы увидеть, что вы не первый, кто сталкивается с этой проблемой.
источник