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...
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..