Ответов: 1 Просмотров: 207
|
Есть свой шаблонизатор все работает отлично, но проблема постоянно возникает с логикой IF/ELSE, причина понятна слабовато знаю PCRE. Я использую вот такое выражение для поиска тегов типа <if name="var">$VAR = TRUE</if>, есть ещё вариант <if name="var">$VAR = TRUE</else>$VAR = FALSE</if>. Сами по себе они работаю, но вот если начитаются вложения типа:
То начинаются и проблемы, при полной жадности он кушает: <if name="var"><if name="var2"> </else> </if> что понятно. вот выражение:
При ограниченной типа:
тоже проблемы нельзя что б за </if> что-то стояло.
вот еше для if/else:
На данный момент решаю проблему парся два раза в зависимости есть ли в квантификаторах: <if name="
Вот код метода:
CODE ( text):
скопировать код в буфер обмена
/** * ПАРСИНГ <if name="">*</if> * */ protected function if_($var, $value=false){ if(!preg_match('|<if name="'.$var.'">(.*?)</if>.|sim', $this->CONTENT, $result) or stristr($result[1],'</else>')){ $result =false; } if($result and stristr($result[1],'<if name="')){ if(!preg_match('|<if name="'.$var.'">(.*)</if>.|sim', $this->CONTENT, $result) ){ $result =false; } } if($result and !empty($result)){ if($value){ $this->put(str_replace($result[0],$result[1],$this->CONTENT)); }else{ $this->put(str_replace($result[0],'',$this->CONTENT)); } } }
И даже так частенько происходят накладки с вложениями условиями ((
Хотелось бы как-то сделать один нормальный PCRE шаблон чтобы отбрасывать такие ситуации. Может кто сталкивался или видел в каком-то шаблонизаторе нормальное выражение. |