need some help

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

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

    Alix

    Регистр.:
    27 янв 2008
    Сообщения:
    234
    Симпатии:
    84
    Всем привет!
    Исходный текст - {Text1|Text2|Text3} random-random {string1|string2|string3}.
    Задача - распарсить текст таким образом, чтобы с помощью одной регулярки получить в результате массив со всеми вхожденими в скобках {} и слова без вертикальной черты |
    Вот такой вариант отрабатывает лишь фигурные скобки:
    {((\w*)\|?)*}
     
  2. juggernaut13

    juggernaut13 Постоялец

    Регистр.:
    23 авг 2009
    Сообщения:
    59
    Симпатии:
    16
    random-random требуется?
    [\w-]*
     
  3. Alix

    Alix

    Регистр.:
    27 янв 2008
    Сообщения:
    234
    Симпатии:
    84
    Нет, на выходе нужно лишь {Text1|Text2|Text3} и соотвественно отдельно Text1, Text2, Text3. Добрался до вот такого варианта
    {(\w+\|?)*}
    но он возвращает только последнее вхождение (Text3, string3), а надо чтобы возвращал все.

    Пока что выкрутился другим, менее элегантным способом. Но все еще рад выслушать идеи на этот счет.
     
  4. antn

    antn Постоялец

    Регистр.:
    11 июл 2009
    Сообщения:
    104
    Симпатии:
    30
    PHP:
    preg_match_all('~(?<=[{|])[^{|}]+?(?=[|}])~'$text$m);
    print_r($m);
     
Статус темы:
Закрыта.