Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyrażenia regularne w c++
sazian
post 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 ohno-smiley.gif
Jeśli wstawię na końcu "O" to już nie działa sad.gif

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 ?

Go to the top of the page
+Quote Post
mrc
post 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).


--------------------
Go to the top of the page
+Quote Post
sazian
post 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 sad.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.04.2024 - 12:49