Wyrażenia regularne w c++ |
Wyrażenia regularne w c++ |
26.05.2017, 09:09:30
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 045 Pomógł: 141 Dołączył: 19.09.2006 Skąd: B-tów Ostrzeżenie: (0%) |
Witam,
piszę prostą aplikację w ionic3 w której używam bazy sqlite, ponieważ potrzebuję użyć wyszukiwania regexp zainstalowałem plugin cordova-sqlite-evcore-extbuild-free. Wszystko było by pięknie gdyby nie dziwny problem w wyrażeniami. Przykładowy tekst "ZASŁONA wenge" i szukam w nim wyrażenia "[zZżŻźŹ][aAąĄ][śŚsS][łŁlL][oOóÓ]" czyli jest to napis "zasło" gdzie polskie znaki mogą być z ogonkami lub bez. Do tego w ionicu wyrażenia są case sensitive więc muszę podawać oba warianty. Wyszukiwarka niestety nie znajduje takiego wyrażenia, więc sprawdziłem je w php i działa, sprawdziłem w js, również działa. Trochę poszperałem w tym pluginie i znalazłem bibliotekę w c++ która dodaje tego regexpa, po drobnych przeróbkach skleciłem taki skrypt testowy Kod #include <stdlib.h> #include <string.h> #include <regex.h> #include <iostream> using namespace std; const static int regex_compile_flags = REG_EXTENDED; #define tofind "[zZżŻźŹ][aAąĄ][śŚsS][łŁlL][oOóÓ]" int main(int argc, char** argv) { regmatch_t rm[2]; regex_t re; int r; regcomp(&re, tofind, regex_compile_flags); r = regexec(&re, "ZASŁONA wenge", 2, rm, 0); if (r == 0) { printf("Match!\n"); } else { printf("NO match!\n"); } return 0; } Po uruchomieniu wyświetla "NO match!". Ale jak z wyrażenia usunę sekcję [oOóÓ] to już działa Jeśli wstawię na końcu "O" to już nie działa Może macie jakieś pomysły co tu jest nie tak lub jak to zrobić inaczej ? Dobra wiem że można dodać kolumnę bez polskich znaków i szukać zwykłym LIKE, ale może jednak dało by się inaczej ? |
|
|
26.05.2017, 11:44:37
Post
#2
|
|
Grupa: Zarejestrowani Postów: 160 Pomógł: 27 Dołączył: 22.09.2008 Skąd: Tarnów Ostrzeżenie: (0%) |
Musisz poszukać o tym, czy ta funkcja działa dla znaków spoza standardowego systemu znakowego. Jak zamieniłem Ł na L, to przeszło. Czyli najprawdopodobniej tam gdzie regex ma oOóÓ, jest druga część znaku z tablicy rozszerzonej (bo pewnie bierze pod uwagę tylko char, a nie np. wchar).
-------------------- |
|
|
26.05.2017, 13:39:39
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 045 Pomógł: 141 Dołączył: 19.09.2006 Skąd: B-tów Ostrzeżenie: (0%) |
Co za patologia ...
Wygląda na to że masz racie i to nie radzi sobie z utf, teraz jeszcze się okazało że na starszych androidach(4.4) nie radzi sobie z v[ęe] ale na 5.1.1 już działa |
|
|
Wersja Lo-Fi | Aktualny czas: 26.04.2024 - 08:05 |