2016-04-08 1 views
0

У меня есть шаблон двигателя. при сопоставлении блока {if} ... {/ if}, разбиения содержимого на {else | elif}.preg_match не между конкретными тегами

Но если у содержимого есть вложенный {if} ... {/ if} block, {else | elif} алгоритм условия, соответствующий неправильному тегу else или elif.

Возможно, у меня есть такой контент;

example content

черная линия должна выбираемые но красная линия неактивна.

это мой старый шаблон согласования, но это не работает должным образом

/{(else|elif)[\s]*(.*?)[\s]*}/ 

ответ

0
preg_match_all("/\{\/if}(.*?)\{if \$test3 \}/ms", $input_lines, $output_array); 
Echo $output_array[1]; 

в действии http://www.phpliveregex.com/p/fhf

(Вы должны нажать на кнопку preg_match_all для его работы)

+0

Да, это работает, но не правильно. Например, когда содержимое "abc {else} xyz" regex не может совпадать. Так что я думаю, мне нужен модификатор (?!) "Или что-то вроде этого. – redfox9999

+0

@ redfox9999 обновлен :-) – Andreas

+0

Извините, но все еще не работает. Мне нужна такая картина. (не между {if}) {(else | elif) .....} (не между {/ if}) Но я не могу написать правильное регулярное выражение – redfox9999