|
|
|
| добрый день
Подскажите пожалуста как мне из HTML кода пропарсить такие вещи
<div>
{if var}
что то ...
{default var}
другой текст
{/if}
</div>
|
на месте var может быть любой текст(латинские буквы, цифры, знак подчёркивания)
теоретически мне нужно получить массив вида
$arr['type'] = 'if';
$arr['var'] = 'var';
$arr['true'] = 'что то ...';
$arr['false'] = 'другой текст';
НО может быть так что не будет {default var}
тоесть так
<div>
{if var}
что то ...
{/if}
</div>
|
тогда массив будет такой
$arr['type'] = 'if';
$arr['var'] = 'var';
$arr['true'] = 'что то ...';
$arr['false'] = '';
вообщем то пишу свой парсер ... и нужно минимум функций, приходица велосипед делать ....
смарти и тд слишком объёмные.
может кто делал такое и подскажет как реализовать ... или покажет свой вариант с такой же процедурой. но в вашем представлении? | |
|
|
|
|
|
|
|
для: m@rchello
(17.02.2010 в 15:05)
| | с массивом наверное лишние операции будут получаться
как-то с preg_replace_callback() слегка вроде удобнее, примерно как-то так
<pre><?php
$txt = '+++++<div>+++++
{if var}
что то ...
{default var}
другой текст
{/if}
+++++</div><div>+++++
{if var2}
что то 2...
{/if}
</div>';
function obr($m){
print_r($m);
?><hr><?
if(isset($m[4]))
return ($m[1])? $m[2] :(($m[3]) ? $m[4]: '');
else
return ($m[1])? $m[2] :'';
}
$reg = '@{if\s+(.*?)\s*}
((?>[^{]*|(?!{/if|{default).)*) # то что до {/if или {default
(?:{default\s*(.*?)\s*}
((?>[^{]*|(?!{/if).)*) # то что до {/if
)?
{/if\s*}
@xs';
echo preg_replace_callback($reg, 'obr', $txt);
|
но для проверок этих var наверное какое-нибудь ещё и eval() придётся использовать, хотя слабо себе представляю какие бывают шаблонизаторы
и иногда удобнее просто прогонять весь текст выражением попросче , а уже в такой-же функции анализировать чего на самом деле происходит
Или похоже можно сделать (кажется будет ещё на чуть медленнее) с preg_split() | |
|
|
|