REGEXP '[[:<:]]".$pret."[[:>:]]'
REGEXP u mysql upitu, kada kucam reč "smeštaj" ne pronalazi one upise koji umesto š imaju s, tj. "smestaj", a i obrnuto dok LIKE pronalzi i jedno i drugo.
REGEXP mi se cini da daje preciznije rezultate od LIKE, pa zato sam hteo sa njim da pokusam, ali ova slovca me zezaju.
Da li postoji neko resenje za slovca šćčž kod REGEXP?
Kako vi pretrazujete bazu, dajte neki primer?
- +/- sve poruke
- ravni prikaz
- starije poruke gore
REGEXP '[[:<:]]".$pret."[[:>:]]'
REGEXP u mysql upitu, kada kucam reč "smeštaj" ne pronalazi one upise koji umesto š imaju s, tj. "smestaj", a i obrnuto dok LIKE pronalzi i jedno i drugo.
REGEXP mi se cini da daje preciznije rezultate od LIKE, pa zato sam hteo sa njim da pokusam, ali ova slovca me zezaju.
Da li postoji neko resenje za slovca šćčž kod REGEXP?
Kako vi pretrazujete bazu, dajte neki primer?
Ovako kako si ti to napisao, sumnjam da će raditi.
Regular expression radi "egzaktnu" usporedbu onoga što si poslao unutra. Znači ako vrijednost tvoje ulazne varijable "smjestaj" onda regex točno pokušava matchati tvoju riječ. Znači samo "smjestaj" ulazi unutra. Pretpostavljam da si to radio za neki pretraživač (korisnik nešto upiše i onda ti to pronađeš). Po meni regex ti baš i nije za to. On mora biti fiksni i pretraživati neki dinamički skup podatka, a ne da imaš fiksni skup podataka koji pretražuje dinamički regex (ovisno o korisniku), onda korisnik može tu unutra bilo što baciti.
Inače regex koji ti može matchati smještaj i smjestaj je ovakav "smje[š|s]taj" ili "smje.taj", ali ako korisnik to mora napisati, onda je to loše.
Ako već želiš ostati na regex-u onda napravi uniju dva selecta, jedan sa izvornim regex-om, a drugi sa regex-om u kojem sve HR znakove zamijeniš sa običnim-a (bar ih nema puno).
dado2202, hvala ti.
Ja sam skroz zaboravio da sam postavio pitanje na ovom forumu :)
Inace, nasao sam resenje, tj drugi su nasli :). Propustam reci koje se pretrazuju kroz ovo:
$pret = str_replace(array('š', 'ć', 'č', 'ž', 's', 'c', 'z','Š', 'Ć', 'Č', 'Ž', 'S', 'C', 'Z'), array('(š|s)', '(ć|c)', '(č|c)', '(ž|z)', '(š|s)', '(c|ć|č)', '(ž|z)','(Š|S)', '(Ć|C)', '(Č|C)', '(Ž|Z)', '(Š|S)', '(C|Ć|Č)', '(Ž|Z)'), $pret);
dado2202, hvala ti.
Ja sam skroz zaboravio da sam postavio pitanje na ovom forumu :)
Inace, nasao sam resenje, tj drugi su nasli :). Propustam reci koje se pretrazuju kroz ovo:
$pret = str_replace(array('š', 'ć', 'č', 'ž', 's', 'c', 'z','Š', 'Ć', 'Č', 'Ž', 'S', 'C', 'Z'), array('(š|s)', '(ć|c)', '(č|c)', '(ž|z)', '(š|s)', '(c|ć|č)', '(ž|z)','(Š|S)', '(Ć|C)', '(Č|C)', '(Ž|Z)', '(Š|S)', '(C|Ć|Č)', '(Ž|Z)'), $pret);
Čisto ok rješenje. Samo bi bilo bolje da si umjesto zagrada "()" stavljao "[]" zagrade, jer zaobljene zagrade su kod regular expression-a matching grupe, dok su uglate zagrade za matchiranje single char-a ili riječi. Sada ti radi regular dodatni posao jer i matcha matching grupe(tj. jednu grupu) nad tim slovom (koje ti i ovako i onako ne čitaš, ali one se ipak kreiraju)