[ davidovic @ 17.02.2003. 13:51 ] @
Zanima me kako da raydvojim rec na slova. Na primer $rec = pomoc
e sad mi treba kod koji ce mi dati recimo $prvoslovo = p , $drugoslovo = o , $treceslovo = m , $cetvrtoslovo = o , $petoslovo = c . Molim vas ako znate ostavite mi kod Hvala vam puno ljudi !!!

[Ovu poruku je menjao zombie / DDG dana 17.02.2003. u 16:30 GMT]
[ Gojko Vujovic @ 17.02.2003. 14:09 ] @
Code:

$rec = 'pomoc';
$slova = preg_split('//', $rec, -1, PREG_SPLIT_NO_EMPTY);
print_r($slova);
[ Zoran Rašković @ 17.02.2003. 14:19 ] @
Code:

<?

$rec="Pomoc";

$duzina=strlen($rec);

$k=array();

echo "Rec: <I><B>$rec</B></I><p>";

for ($i=0; $i<$duzina; $i++)
    {
        $slovo=substr($rec, $i, 1);

        $br=$i+1;

        echo "Slovo br. $br: <b>$slovo</b><p>";



    }


?>
[ -zombie- @ 17.02.2003. 14:26 ] @
aman gojko, nece valjda regularne izraze za nesto tako prosto (vidi se da si perl-ovac :D)

string u php-u se ponasa kao array() kada ga ti koristish tako $rec[3] daje cetvrti karakter u stringu $rec. (pocinje od nule)

znaci

Code:

$rec="pomoc";
for ($i=0; $i<strlen($rec); $i++) {
  echo "$i: ".$rec[$i];
}



ps. mada je previlnija sintaxa za ovo $rec{3} (viticaste zagrade)..
[ Gojko Vujovic @ 17.02.2003. 14:49 ] @
Perl je zakon .. nego zašto je pravilnije koristiti te zagrade {} – ? Imaš li neki tekst na temu tih standarda i sintakse?
[ Dragoslav Krunić @ 17.02.2003. 15:27 ] @
Nego šta nego je zakon Što bi koristio for kad može sve u jednoj liniji da reši? Elegantno
[ -zombie- @ 17.02.2003. 16:37 ] @
gojko: mislio sam u php-u. kada karakterima stringa pristupash preko indexa $s[3], onda je pravilnije koristiti sintaxu $s{3}. to je ispravnije, zato sto prva sugerise da je $s niz, sto nije tacno (mislim da php daje i warning ili bar notice ako koristish [])

nema neki text. ima u php manualu (pogledaj mozda strings operators)


ixqq: pod 1) moze u jednoj liniji i u php, ali nije preporucljivo koristiti regex za tako proste stvari, jer su znato sporiji od bilo kog drugog nacina procesiranja texta.

pod 2) nije sa regexima u jednoj liniji, a bez njih da mora poetlja. u php-u, mozes BEZ IJEDNE linije da pristupish karakterima stringa. (znaci bez preg_split() ili bilo cega drugog).

ona petlja je bila samo da se prodje kroz string, da bih ilustrovao sintaxu. (isto to bi morao da radish i posle preg_split() sa $slova nizom..)
[ Dragoslav Krunić @ 17.02.2003. 17:55 ] @
Eh, jebiga. Naviko sam sa regexpom. Ali, ono, što kriptičnije i u jednoj liniji
[ _owl_ @ 17.02.2003. 23:33 ] @
Postoji samo jedan mali problemcic, oba resenja koja ste naveli nisu multibyte safe (za prce sam dodao u opciju ali izgleda da bas ne radi kako treba)

$slova = preg_split('//u', $rec, -1, PREG_SPLIT_NO_EMPTY);

P.S
testirano sa stringom 'ajd da vidimo da li radi cirilica' (napisanim cirilicom u UTF8-ici) koji strlen, preg_split razdvajaju na 62 karaktera. Prilicno sam iznenadjen da preg_split nije ovo odradio kako treba iako mu je receno da string tretira kao UTF8.
[ -zombie- @ 18.02.2003. 01:21 ] @
ne bi da se pravim vazan, ali pokazi mi definiciju gde pise da ne bi trebalo da odvaja po svakom bajtu (btw, kako radi isto u perlu?)

ja samo znam da kada ukljuucish /u modifier, da \w prepoznaje š,đ,ć,... slova kao "word" karaktere, a slicno, \W ih ne prepoznaje.

mozda bi mogao da probash nesto sa preg_match(), ili preg_match_all(), koristeci \w i/ili \W, umesto preg_split()


sa druge stran, mozda i jeste bug..

sa trece strane, imash mb_* funkcije u php-u, ukljucujuci i regex funkcije (mada posix, a ne pcre). mb_strlen() na utf8 cirilici radi super, a pretpostavljam i mb_split() i druge regex funkcije (nisam uspeo da probam, imam stariju verziju php bez ovih f-ja)
[ Gojko Vujovic @ 18.02.2003. 03:20 ] @
Zar nisu mb_* experimentalne funkcije?
[ -zombie- @ 18.02.2003. 03:26 ] @
da, pa? ;)

rade dobro koliko ja znam. bar za utf-8.

josh zeza nesto oko drugih nacina kodiranja (japanski/kineski/tunguziski..), ali sa utf8 nema prob.


jedino mora malo da se pazi, i da se setuje nesto za regex funkcije (neka opcija za interno kodiranje - nisam najbolje razumeo), ali je valjda ok
[ _owl_ @ 18.02.2003. 12:31 ] @
Citat:

ne bi da se pravim vazan, ali pokazi mi definiciju gde pise da ne bi trebalo da odvaja po svakom bajtu (btw, kako radi isto u perlu?)


Nigde ne pise ali reci mi da li neko radi $string[0] da bi izvukao prvo slovo ili prvi bajt (ako mislis na preg_split tako je vratio onaj regex koji sam napisao). Ako koristis \w i /u normalno da ce da radi kada je rec definisana kao niz karaktera (pardon bajtova) odvojenih sa space, \n, \r, \t.
I ovde kada bi uradio
Code:

for ($i=0; $i<strlen($rec); $i++) {
   echo $rec[$i];
}

pocetni string bi ti bio ispisan kako treba (problem je kada multibyte karakter razdvojis na dva dela izmedju kojih upises nesto drugo -- ili sta god -- ili...).
Kakva su ti iskustva sa mb* funkcijama (da li si radio neke sajtove koji su potpuno cirilicni)??
[ -zombie- @ 18.02.2003. 14:44 ] @
cisto da budem jasan, "\w" NE znaci "word", vec "word character", tj, po defaultu, matchuje samo [a-zA-Z0-9_] karaktere. ovo u prevodu znaci da utf8 slova (cirilica, nasa slova u latinici) nece prepoznati kao "word" karaktere, vec kao delimitere reci, tj kao \W

e, kad se ukljuci /u modifier, onda sve radi ok sa utf karakterima. (osim preg_split())


iskustva sa mb_* nemam. samo sam se malo igrao, i citao. koliko ja znam, sa utf8 radi ok, josh nije stabilno sa japanskim i slicnim kodinzima.

problem nije kako rade, vec mala/nepotpuna dokumentacija o mb_* funkcijama. (bolje rade nego sto to pise u doc ;)

ti kad probash, napisi svoje iskustvo...