Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyrażenia regularne w c++
Forum PHP.pl > Inne > Hydepark
sazian
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 ?

mrc
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).
sazian
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
To jest wersja lo-fi głównej zawarto¶ci. Aby zobaczyć pełn± wersję z większ± zawarto¶ci±, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.