Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Бизнес-решения > Скрипты, программы и технические решения
Дата
USD/RUB58.6530
BTC/USD0.0000
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии.

Закрытая тема
Опции темы Опции просмотра
Старый 11.07.2008, 17:36   #1
drivehunter
Давайте дружить!
 
Аватар для drivehunter
 
Регистрация: 10.07.2008
Сообщений: 448
Бабло: $38805
Отправить сообщение для drivehunter с помощью ICQ
По умолчанию нуна пхп разборщик конструкции {a|b | {c|d|e}} итп

народ,
кто видел php-исходник, который могет разобрать канстракшен типа:

{{Съешь|Сожри} {еще|исчо} этих {мягких|} французских булок | Не, пасиба я сыт}

и либо перебрать все варианты (из альтернатив внутри фиг. скобок), либо отдать случайный?
drivehunter вне форума  
Старый 11.07.2008, 22:24   #2
sevian
Senior Member
 
Регистрация: 29.08.2007
Сообщений: 168
Бабло: $1930
Отправить сообщение для sevian с помощью ICQ
По умолчанию

случайный отдать совсем просто

$out = X( X('Съешь','Сожри') . X('еще','исчо') . 'этих' . X('мягких','') . 'французских булок');

где function Х() очевидно возвращает случайный аргумент из полученных :-)
__________________
Конвертим деньги в куб, продаем электронную музыку, VPN
sevian вне форума  
Старый 11.07.2008, 23:45   #3
drivehunter
Давайте дружить!
 
Аватар для drivehunter
 
Регистрация: 10.07.2008
Сообщений: 448
Бабло: $38805
ТС -->
Отправить сообщение для drivehunter с помощью ICQ
автор темы ТС По умолчанию

хе-хе.. это слишком просто - мы не знаем заранее исходной строки и структуры скобок в ней.
нужна универсальная функция, которая разберет любую строку с подобным синтаксисом.
drivehunter вне форума  
Старый 12.07.2008, 01:44   #4
zlaya ssuka
ChefJavaProgrammierer
 
Аватар для zlaya ssuka
 
Регистрация: 05.04.2007
Сообщений: 1,166
Бабло: $15090
Отправить сообщение для zlaya ssuka с помощью ICQ
По умолчанию

надо рекурсивную процедурку делать, увидел скобку - запускай еще раз себя с остатком строки.
zlaya ssuka вне форума  
Старый 12.07.2008, 17:23   #5
carl0s
Senior Member
 
Аватар для carl0s
 
Регистрация: 23.11.2007
Сообщений: 141
Бабло: $9970
По умолчанию

Цитата:
Сообщение от 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); 
второй вариант ессесно гораздо быстрее.. но первый просто проще написать

Последний раз редактировалось carl0s; 13.07.2008 в 02:54. Причина: с рекурсией
carl0s вне форума  
Старый 13.07.2008, 17:20   #6
drivehunter
Давайте дружить!
 
Аватар для drivehunter
 
Регистрация: 10.07.2008
Сообщений: 448
Бабло: $38805
ТС -->
Отправить сообщение для drivehunter с помощью ICQ
автор темы ТС Thumbs up

carl0s, сенкс огромный - седня потестю
drivehunter вне форума  
Старый 13.07.2008, 20:34   #7
bataka
Senior Member
 
Регистрация: 06.04.2008
Сообщений: 337
Бабло: $4080
По умолчанию

если меня не глючит
это синтаксис одного генератора текста который я копал еще хуй знает когда
так вот если это он, то там свои обработчики были и была еще куча модулей к нему
копай доки ..
а костыли не есть гуд
bataka вне форума  
Старый 14.07.2008, 20:28   #8
drivehunter
Давайте дружить!
 
Аватар для drivehunter
 
Регистрация: 10.07.2008
Сообщений: 448
Бабло: $38805
ТС -->
Отправить сообщение для drivehunter с помощью ICQ
автор темы ТС По умолчанию

carl0s, рекурсивный вариант рулит, респект

bataka, да нужна-то была одна простая фича из сабжа - посерфил - не нашел. но здесь добрые люди помогли.

думаю тему мона закрыть.
drivehunter вне форума