Помогите с регуляркой для вложенных списков

Тема в разделе "Регулярные выражения", создана пользователем itex, 10 май 2009.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. itex

    itex

    Регистр.:
    15 ноя 2007
    Сообщения:
    274
    Симпатии:
    64
    Помогите пожалуйста составить регулярку для вложенных списков вида {текст|другой текст }
    Код:
    {первый|первый|{второй|второй|второй|{третий|третий}}|первый|первый}
    Первый, второй, третий - это уровни вложенности.
    Как сделать регуляркой парсинг, причем чтоб уровней вложенности было сколько угодно много?:bc:
     
  2. RolCom

    RolCom

    Регистр.:
    12 мар 2008
    Сообщения:
    351
    Симпатии:
    108
    Язык какой?
     
  3. itex

    itex

    Регистр.:
    15 ноя 2007
    Сообщения:
    274
    Симпатии:
    64
    PHP
    Код используется для темплейтов текста.
     
  4. RolCom

    RolCom

    Регистр.:
    12 мар 2008
    Сообщения:
    351
    Симпатии:
    108
    <?php
    $text='{первый1|первый2|{второй1|второй2|второй3|{третий|третий2}}|первый3|первый4} {далее1|далее2}';
    $flag=true;

    while($flag) {
    $flag=false;
    $text=preg_replace_callback('#{[^{}]*}#', 'replace', $text);
    }

    function replace($m) {
    global $flag;
    $a=explode('|', substr($m[0], 1, -1));
    $flag=true;
    return $a[rand(0, count($a)-1)];
    }

    print $text;
     
    itex нравится это.
  5. itex

    itex

    Регистр.:
    15 ноя 2007
    Сообщения:
    274
    Симпатии:
    64
    То, что и хотел, железно работает, благодарю.:ay:
     
Статус темы:
Закрыта.