PDA

Pogčedajte punu verziju : kako iz utf8 enkodiranog stringa napraviti niz svih reči od bar 3 karaktera?


noviKorisnik
08. 03. 2006., 16:55
Jedno prosto pitanje - kako iz utf8 enkodiranog stringa napraviti niz svih reči od bar 3 karaktera?

(... možda je i odgovor jednostavan, ali bih ga voleo videti svakako :-)

Br@nkoR
08. 03. 2006., 20:20
Odgovorio na es-u, pa ajde i ovde. ;)
http://www.php.net/mbstring

noviKorisnik
08. 03. 2006., 22:45
(... evo i ja sam na es-u, ali moram i ovde, ne prate svi taj es :-)
Da, izgleda da bi moralo preko mbstringa, do toga sam i sam došao, ali još uvek nisam našao način kako da to efikasno rešim.

Recimo, probao sam...
preg_match_all ('/\w{3,}/', $string, $matches);
... i to je super, onaj rezultat koji mi treba, osim ako u igru ulaze i utf8 karakteri, recimo domaća latinica ili ćirilica ... onda ovo ne funkcioniše kako valja.

E sad, koliko razumem, mb_eregi kao i eregi vraća samo prvo nalaženje patterna, baš kao i preg_match, ali meni treba ponašanje kao za preg_match_all - znači svi rezultati u nizu.

Druga stvar je što ove funkcije izgleda ne priznaju foru "\w", a ja ne znam kako da predstavim skup svih mogućih karaktera koji predstavljaju cifru ili slovo, ili sve one karaktere koje ne bi bili u tom skupu (beline, specijalni karakteri i šta još) ako bi koristio mb_split ...

ivanhoe
08. 03. 2006., 23:07
pa verovatno mozes preko klase karaktera ili kako se vec zove ona uglasta zagrada....znaci nesto tipa [a-zA-Z0-9čćšđ]{3,} , s tim sto sam ja ovde ukucao samo par nasih slova kao primer, a ti stavis sve koji te zanimaju...

noviKorisnik
08. 03. 2006., 23:58
Za sada, evo one druge varijante, sa splitovanjem...
$matches = mb_split ('[[:space:][:punct:][:cntrl:][:blank:]]+', $string);
... verujem da bi ovo trebalo da isfiltrira većinu tekstova (možda sam malo i preterao, a možda sam nešto i ispustio (?)) - ostaje samo da se otresem reči kraćih od 3 karaktera i gotova stvar.