TiTanium
Новичок
PCRE логика для if/else if
Есть свой шаблонизатор все работает отлично, но проблема постоянно возникает с логикой 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="
Вот код метода:
И даже так частенько происходят накладки с вложениями условиями ((
Хотелось бы как-то сделать один нормальный PCRE шаблон чтобы отбрасывать такие ситуации. Может кто сталкивался или видел в каком-то шаблонизаторе нормальное выражение.
Есть свой шаблонизатор все работает отлично, но проблема постоянно возникает с логикой 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 name="'.$var.'">(.*)</if>|sim
Код:
<if name="'.$var.'">(.*?)</if>.|sim
вот еше для if/else:
Код:
|<if name="'.$var.'">(.*?)</else>(.*?)</if>|sim
Вот код метода:
PHP:
/**
* ПАРСИНГ <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 шаблон чтобы отбрасывать такие ситуации. Может кто сталкивался или видел в каком-то шаблонизаторе нормальное выражение.

