>>V regulernich vyrazech se moc nevyznam a tak bych se rad zeptal, >>zda se s jejich pomoci da provest (v PHP) nasledujici: Aby byly znaky >>ktere se v retezci opakuji vice nez 3x (za sebou) nahrazeny pouze >>3 znaky z teto rady, pr. xxxxxxxxxx -> xxx ----- -> --- aaaa -> aaa >Co napriklad takhle? (neodzkouseno) s/\(.\)\1\{3,}/\1\1\1/g to je ok, jenze takhle to chodi v perlu, ale ne v php. a na muj vkus ;-)) je tam nejak zbytecne moc backslashs - stacilo by: s/\(.)\1{3,}/\1\1\1/g ale JDE to i v php. jenom je treba pouzit regex fce pro perlovskou syntaxi (preg_*), pac phpsky (posix) regexy muzou pouzivat pamatovani jenom v sibstitucnim stringu. primo v regexu se neuplatni. BACHA - preg_* fce jsou implementovane az od php verze 3.0.9 !!!!!!!. ale protoze php holt neni perl a zachazi s regexy trochu jinak, musi se to cele jeste trochu precesat... :)) $text="ruuuuuuuzovaaaaaaaa"; echo preg_replace("/(.)\\1{3,}/","\\1\\1\\1",$text); # vypise: ruuuzovaaa pokud chces ovladat kolik tech vyskytu (zleva) se ma upravit, dej si tam jeste ctvrty parametr. bude-li to cislo n>0, nahradi se prvnich n vyskytu, pri n=0 nebo "" nebo false se nenahradi nic a bude-li to -1 nahradi se vsechny vyskyty: $kolik="1"; $x=preg_replace("/(.)\\1{3,}/","\\1\\1\\1",$text,$kolik); echo $x; # vypise: ruuuzovaaaaaaaa a jeste jen tak na okraj: jsou to regulArni vyrazy a ne regulErni. to jsou totiz zcela odlisne pojmy. regulerni je vsechno, co neni neregulerni... a regulerni nazev techhle sikovnych konstrukci je 'regularni vyrazy'. :)) bye, spock.
This archive was generated by hypermail 2.1.2 : 04. 09. 2001, 05:40 CEST