regularni vyrazy
17 příspěvků
Archiv diskusního fóra
Fórum je uzavřené a slouží pouze ke čtení. Některé informace mohou být zastaralé.
-
jak bych zapsal jeden jediny(jakykoliv) znak opakovany libovolne mockrat? neco jako aaaa, wwwww, ....... apod.
-
a+ odpovídá a, aa, aaa, aaaaaaaaa, .... a* odpovídá -, a, aa, aaa, aaaaaaaaaa, .... a? odpovídá -, a a{min, max} a{3, 5} je počet "a" od 3 do 5 a{3, } je počet "a" 3 a více a{5} je počet "a" 5 a méně "a" je jakýkoliv výraz, jestli má mít více znaků, uzavřeš ho do závorek
-
mno jo pavel tohle vsechno znam ale jestli by tohle neslo nadefinovat pro vsechny znaky najednou .. aniz bys musel psat a+, b+, c+ atd ..
-
btw neni nahodou a{5} opakovani "a" prave 5x? :-)
-
je :) jinak by to meli jit: [a-z]+ ale pak to muze byt: aabzskehjkleeeejlkydooofsdjlflllllllllsdfdsddddddjdshfzsirsnhskncvxz a vubec cokoliv :( to co chces je tezky..
-
myslim ze v pcre by to bylo: /(\w)\1*/
-
mno jo to by pak nikdo nemoch psat nic :-) .. asi to necham bejt melo to jen trosku omezit bordel na chatu ze by se treba vypsalo max. 15stejnejch znaku a pri vetsim poctu stejnych znaku by to hodilo nejakou hlasku .. videl sem to na xpointu ale tam je to daleko vychytanejsi rozpozna to i opakovani nejakej skupiny znaku napr. abcd abcd abcd abcd
-
no to co pises by slo udelat podobne jako to nad tim: /(\w{1,6})\1{2,}/ tohle by melo najit jakoukoli skupinu pismen (od1 do 6) a zistit jestli se opakuje vic nez 3x za sebou...
-
wow du to vyzkouset diky
-
mno nejak to nemuzu rozchodit ve kterej funkci se to pouziva ?
-
Já bych taky něco potřeboval: Potřeboval bych nahradit *1* - *102* za obrázky se smajlíkama, ale potřeboval bych, aby to nahradilo jen třeb prvních 5 smajlíků.
-
2kecinzer: treba nejak takle ;-) function smajlos($p,$r=false) { static $cnt; if($r){ $cnt++; echo "$p,$cnt<br>"; return $p>0&&$p<103&&$cnt<6?"<img src=\"s$p.gif\">":"*$p*"; }else{ $cnt=0; return preg_replace('/\*(\d{1,3})\*/e', 'smajlos(\\1,true)',$p); } }
-
A sakra, nějaký vysvětlení? Nějak to nechápu, to snad nemůže fachat!
-
//$p :: pokus se jedna o rekurzni volani ($r=true)(ve kterem se to nahrazuje tak je to cislo smajlika, pokud ne ($r=false) tak je to cely text //$r :: rekurzni volani - true/false //$cnt :: staticka funkce - uklada aktualni pocet nahrazenych smajliku v retezci function smajlos($p,$r=false) { static $cnt; if($r){ //kdyz jde o rekurzi - $p je pak cislo smajlika $cnt++; //zvyseni promene $cnt o jedno return $p>0&&$p<103&&$cnt<6?"<img src=\"s$p.gif\">":"*$p*"; //pokud je cislo smajlika mezi 1 a 102 a $cnt mensi nez pet tak to nahradi, jinak to necha v puvodnim tvaru (nahradi *$p*) } else{ //nejde o rekurzi - volani z kodu - $p je cely text $cnt=0; //nulovani pocitadla nahrazenych smajliku return preg_replace('/\*(\d{1,3})\*/e', 'smajlos(\\1,true)',$p); //vrati text, kde jsou vsechny *(\d{1,3})\* nahrazeny navratovou hodnotou fce smajlos(cislo_smajlika,true) } }
-
jinak.. slo by to i narvat do jednoho vyrazu :-)) ------- if(preg_match('/^(.*?)\*(?=[1-9]\*|[1-9][0-9]\*|10[0-2]\*)([1-9]|[1-9][0-9]|10[0-2])\*(?:(.*?)\*(?=[1-9]\*|[1-9][0-9]\*|10[0-2]\*)([1-9]|[1-9][0-9]|10[0-2])\*)?(?:(.*?) \*(?=[1-9]\*|[1-9][0-9]\*|10[0-2]\*)([1-9]|[1-9][0-9]|10[0-2])\*)?(?:(.*?) \*(?=[1-9]\*|[1-9][0-9]\*|10[0-2]\*)([1-9]|[1-9][0-9]|10[0-2])\*)?(?:(.*?) \*(?=[1-9]\*|[1-9][0-9]\*|10[0-2]\*)([1-9]|[1-9][0-9]|10[0-2])\*)?(.*?)$/x',$text,$m)) { $text=''; for($i=1;$i<7;$i++) $text.=$m[$i*2-1].(@$m[$i*2]?'<img src="s'.$m[$i*2].'.gif">':''); }
-
No nevim, myslim že nejlepší řešení je tohle: function nahrad($n) { global $count; $result = "*$n*"; if ($n > 0 && $n < 103 && $count < 5) { $result = "<img src=\"images/smajly/$n.gif\" width=\"15\" height=\"15\">"; $count++; } return $result; } $count=0; $text = preg_replace("/\*(\d{1,3})\*/e", "nahrad($1)", $text);
-
no je asi nejjednodussi.. nechtel jsem vytvaret globalni promenny, ale jestli to pouzivas jednou z jednoho mista tak je to asi ok..