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

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

Закрытая тема
Опции темы Опции просмотра
Старый 31.03.2015, 18:41   #1
MilkSucker
Senior Member
 
Регистрация: 02.07.2008
Сообщений: 174
Бабло: $44955
Отправить сообщение для MilkSucker с помощью ICQ
Question Поделитесь строкой, чтобы генерить текст из исходника синонимизированного?

На входе:
Код:
{Hello|Hi|Good Day}, my {friend|mate}! {Click the link|Open the following link} {to become famous|to earn money|to have sex with Sasha Grey}!
На выходе чтобы получалось:
Код:
Hello, my mate! Click the link to have sex with Sasha Grey!
Good Day, my friend! Open the following link to become famous!
Hi, my friend! Click the link to earn money!
То есть чтобы то что внутри {} разбивалось на | и рандомно выбиралось одно из вхождений, но чтобы то что вне {} оставалось на месте.
Думаю что должна быть какая-то конструкция, но что-то не могу допереть в regex как это сделать.

Пожалуйста?
MilkSucker вне форума  
Старый 31.03.2015, 19:03   #2
spasibo
banned
 
Регистрация: 14.04.2013
Сообщений: 127
Бабло: $26265
По умолчанию

php spintax гуглится легко
__________________
не за что
spasibo вне форума  
Старый 31.03.2015, 19:22   #3
alter13
В дурке выходные
 
Аватар для alter13
 
Регистрация: 09.09.2014
Сообщений: 1,354
Бабло: $183435
По умолчанию

PHP код:
<?
//setlocale(LC_ALL, "ru_RU.CP1251");
class alternate {
  var 
$s;
var 
$pattern;

        function 
ms () {
//seeding
        
list($usec$sec) = explode(' 'microtime());
        return (float) 
$sec + ((float) $usec 100000);
        
srand(make_seed());

            }
    function 
bracket ($str) {
    
//returns bracket code
     
if (!strcmp($str,"(")) {return 1;}
     elseif (!
strcmp($str,")")) {return -1;} else {return 0;}

                }

    function 
alternate ($s="") {
    
$this->ms();
    
$this->s=$s;
    
$this->pattern="/\(([^\(]*?)\)/i";
    while (
preg_match($this->pattern,$this->s)!=0)
    
$this->s=preg_replace_callback ($this->pattern
    
create_function (
    
'$matches'
    
'$store=explode("|",$matches[1]);
    $store=explode("|",$matches[1]);
    $rand_key=$store[array_rand($store,1)];
    return $rand_key;'
),
    
$this->s);
   }
}

$line "STROLOWER";
$alter=new alternate ("Running script\n((ha\nil|cr\ny|hello), (world|золото|silver)|how do you (do|did|man)?|anybody here?)");
echo 
$alter->s;

?>
alter13 вне форума  
Старый 01.04.2015, 08:06   #4
MilkSucker
Senior Member
 
Регистрация: 02.07.2008
Сообщений: 174
Бабло: $44955
ТС -->
Отправить сообщение для MilkSucker с помощью ICQ
автор темы ТС По умолчанию

Цитата:
Сообщение от spasibo Посмотреть сообщение
php spintax гуглится легко
Спасибо! я что-то даже не знал как такое назвать чтобы загуглить.
MilkSucker вне форума  
Старый 01.04.2015, 10:54   #5
chesser
автоматизирую интернеты
 
Аватар для chesser
 
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,382
Бабло: $470735
По умолчанию

а упоминание regex тут вообще лишнее, т.к. regex - это парсер, а тут нужен генератор.
__________________
USA и NL серверы и VPS | wiki | блог | Drupal | NginxТДС
Ave, Google, morituri te salutant! © chesser
chesser вне форума