Цитата:
Сообщение от drivehunter
народ,
кто видел php-исходник, который могет разобрать канстракшен типа:
{{Съешь|Сожри} {еще|исчо} этих {мягких|} французских булок | Не, пасиба я сыт}
и либо перебрать все варианты (из альтернатив внутри фиг. скобок), либо отдать случайный?
|
PHP код:
function templ($x){
while (preg_match("/\{[^\{\}]*\}/si",$x,$m))
{
$t=preg_replace('/[]\\\\^$.|?*+(){}[]/', '\\\\$0', $m[0]);
$r=explode('|',substr($m[0],1,-1));
$x=preg_replace('/'.$t.'/',$r[array_rand($r)],$x,1);
}
return $x;
}
целостность там и ошибки - это уже сам делай ))
с рекурсией:
PHP код:
function tmpl(&$s, &$p)
{
for (;$p < strlen($s); $p++) {
if ($s[$p] == '}') break;
else if ($s[$p] == '|') {
$tmp[]=$str;
$str='';
}
else if ($s[$p] == '{') $str .= tmpl($s, ++$p);
else $str .= $s[$p];
}
$tmp[] = $str;
return $tmp[array_rand($tmp)];
}
$p=0;
echo tmpl($x,$p);
второй вариант ессесно гораздо быстрее.. но первый просто проще написать