За последние 24 часа нас посетил 17571 программист и 1314 роботов. Сейчас ищут 1458 программистов ...

Исключение подстроки в регулярном выражении

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

  1. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Давненько не брали мы в руки регулярок... Квалификация теряется.
    В общем, нужна регулярка, которая ищет строку, начинающуюся на "ааа", кончающуюся на "bbb" и не содержащую "aaa" внутри себя.
    Если интересует более конкретный случай - нужно из строки {if:a=1}azazaza {if:b=2}foo{else}bar{endif} ololo {else}baz{endif} выделить внутренний кусок {if...}...{endif}, внутри которого не встречается другой {if...}
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Это случайно не парсинг PHP кода?
     
  3. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Нет, не он. Более того, проект вообще на Python. Но с точки зрения регулярок - все равно.
     
  4. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Решил проблему, поменяв логику работы парсера и сам шаблон (теперь он выглядит как {if p1:a=1}azazaza {if p2:b=2}foo{else p2}bar{endif p2} ololo {else p1}baz{endif p1}), но все равно интересно, как решить эту проблему, если не имеешь возможности поменять исходники
     
  5. dcc0

    dcc0 Активный пользователь

    С нами с:
    27 июн 2014
    Сообщения:
    209
    Симпатии:
    4
    Наверное так можно. Найти все а aaa.*bbb потом посчитать количество ааа - substr_count, но это если нет такого: azazazazazazaza
    Или найти все aaa.*bbb
    Потом поискать в каждом значении массива ааа.*aaa
     
  6. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Выглядит как решение, но перфекционизм просит найти, как бы сделать без вмешательства строковых функций, одной регуляркой. Хотя, может быть, это нереально