Давненько не брали мы в руки регулярок... Квалификация теряется. В общем, нужна регулярка, которая ищет строку, начинающуюся на "ааа", кончающуюся на "bbb" и не содержащую "aaa" внутри себя. Если интересует более конкретный случай - нужно из строки {if:a=1}azazaza {if:b=2}foo{else}bar{endif} ololo {else}baz{endif} выделить внутренний кусок {if...}...{endif}, внутри которого не встречается другой {if...}
Решил проблему, поменяв логику работы парсера и сам шаблон (теперь он выглядит как {if p1:a=1}azazaza {if p2:b=2}foo{else p2}bar{endif p2} ololo {else p1}baz{endif p1}), но все равно интересно, как решить эту проблему, если не имеешь возможности поменять исходники
Наверное так можно. Найти все а aaa.*bbb потом посчитать количество ааа - substr_count, но это если нет такого: azazazazazazaza Или найти все aaa.*bbb Потом поискать в каждом значении массива ааа.*aaa
Выглядит как решение, но перфекционизм просит найти, как бы сделать без вмешательства строковых функций, одной регуляркой. Хотя, может быть, это нереально