|
|
|
| Возникла проблема.
Не получается распарсить блоки {if $var}...{/if}.
<?php
$a = '{if $a}
{if $b}
a
{/if}
b
{/if}
{if $c}
c
{/if}';
preg_match_all('~\{if (.*)\}(.*?)\{\/if\}~sUu', $a, $tags, PREG_SET_ORDER);
print_r($tags);
?>
|
:/ :/
Пробовал сначала открывающие теги получить, потом закрывающие и их соединить, но не то. | |
|
|
|
|
|
|
|
для: WapMorgan
(19.10.2010 в 15:19)
| | Блин, да как же вы не понимаете, регулярными выражениями нельзя парсить вложенные структуры. Нужно самому пробегаться по тексту...
Если ты пишешь шаблонизатор, то просто компилируй этот шаблон в пхп код, а потом исполняй его... Компилировать можно простой заменой, например $str = preg_replace('!{if (.+?)}!', '<?php if(\1){ ?>', $str);
Но лучше просто использовать ПХП, как он и задумывался, - как шаблонизатор. | |
|
|
|
|
|
|
|
для: nikita2206
(19.10.2010 в 22:09)
| | одним применением регулярных выражений - да, нельзя, знаю.
мне бы хоть алгоритм обработки уловить. | |
|
|
|
|
|
|
|
для: WapMorgan
(19.10.2010 в 23:53)
| | 1) прочитать файл
2) заменить { на <?php , } на ?> и т.д
3) записать файл | |
|
|
|
|
|
|
|
для: WapMorgan
(19.10.2010 в 15:19)
| | ;/ | |
|
|
|
|
автор: ..... (25.10.2010 в 21:43) |
|
|
для: WapMorgan
(25.10.2010 в 20:31)
| | читайте про (?R) рекурсия в регулярных выражениях | |
|
|
|
|
автор: ..... (25.10.2010 в 21:46) |
|
|
для: WapMorgan
(25.10.2010 в 20:31)
| | или при пофрагментном чтенни считайте незакрытые теги | |
|
|
|