Czy [:ascii:]
klasa w ogóle działa w Postgres? Nie ma ich w wykazie w ich pomocy , jednak widzę przykłady w sieci, które je wykorzystują.
Mam bazę danych UTF-8, gdzie są sortowanie i c_typ e en_US.UTF-8
, a wersja Postgres to 9.6.2. Kiedy szukam wierszy spoza ASCII, takich jak to:
select title from wallabag_entry where title ~ '[^[:ascii:]]';
I dostać zarówno Unicode i non-Unicode symbole (pełna moc jest tutaj ):
Сталинская правозащитница: мать Меленкова бабушка Настя
Дневник НКВДиста Шабалина: Знает ли Москва положение на фронте?
Бег по городу и поездка на осле: как в средневековье наказывали прелюбодеев
Как комиссар Крекшин в 1740-е чуть не отменил историю России
Have you heard of Saint Death? Don’t pray to her.
Архаїчна українська мова: перевага чи недолік?
Гренада не их
China’s marriage rate is plummeting because women are choosing autonomy over
Co jest nie tak z tym zapytaniem?
postgresql
utf-8
regular-expression
unicode
regex
Suncatcher
źródło
źródło
regexp_replace()
aby zaznaczyć swoje znaki spoza ASCII. Zobacz moją odpowiedź.[:ascii:]
klasy. To, co naprawdę pomogło mi w tym problemie, to koncepcja bloków Unicode, których nauczyłem się z tego wspaniałego wyrażenia regularnego samouczek .Odpowiedzi:
Aby odpowiedzieć na twoje pytanie:
[:ascii:]
działa. W tekście może znajdować się kilka znaków, których nie rozpoznajesz jako nie-ASCII , ale one tam są. Mogą to być na przykład spacje nierozerwalne , lub dowolny inny znak spacji Unicode .Nie jest dziwne, że w tekstach, które kopiujesz i wklejasz ze strony internetowej, nie można wstawić spacji (
), ale nie zauważysz, że tam są.Oto przykład do pokazania:
To Co Dostajesz:
Widać z tego, że twoim problemem jest prawostronna postać . ASCII obsługuje tylko apostrof. Lewy apostrof i prawy apostrof są poprawnymi typograficznie rozszerzeniami Unicode.
dbfiddle tutaj
Możesz to sprawdzić również w poprzednich wersjach na http://rextester.com/UKIQ48014 (PostgreSQL 9.5) i http://sqlfiddle.com/#!15/4c563/1/0 (PostgreSQL 9.3)
Teksty, które, jak myślę, uważasz za czyste ASCII i nie są :
dbfiddle tutaj
Teksty te używają „ zamiast ” do oznaczania apostrofów.
Sprawdź interpunkcję: Dlaczego właściwy pojedynczy cytat (U + 2019), a nie semantycznie odrębny apostrof (U + 0027), jest preferowanym znakiem apostrofu w Unicode? ... aby zobaczyć, że nie jesteś pierwszą osobą, która napotyka ten problem.
źródło