Поделитесь строкой, чтобы генерить текст из исходника синонимизированного? - Форум успешных вебмастеров - GoFuckBiz.com
 
 
Форум успешных вебмастеров - GoFuckBiz.com

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

Закрытая тема
Опции темы Опции просмотра
Старый 31.03.2015, 18:41   #1
MilkSucker
Senior Member
 
Регистрация: 02.07.2008
Сообщений: 174
Бабло: $44985
Отправить сообщение для 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
Senior Member
 
Регистрация: 14.04.2013
Сообщений: 131
Бабло: $28815
По умолчанию

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

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;

?>
__________________
Знать путь и пройти его — не одно и то же. Pharmcash & PharmcashUSA - знаем, проходили... Лидеры в фарме
alter13 вне форума  
Старый 01.04.2015, 08:06   #4
MilkSucker
Senior Member
 
Регистрация: 02.07.2008
Сообщений: 174
Бабло: $44985
ТС -->
Отправить сообщение для MilkSucker с помощью ICQ
автор темы ТС По умолчанию

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

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