Сначала я хотел бы сказать, вы создаете свою собственную библиотеку шаблонов? Вокруг есть несколько зрелых, таких как Smarty , которые должны соответствовать вашим требованиям. Джефф Этвуд также хорошо читает эту статью: « Не изобретай колесо, если только ты не планируешь узнать больше о колесах »
Если вы хотите развернуть свое собственное решение, тогда это хорошо, вот несколько советов.
1009 * BBCode *
Этот метод основан на установке расширения BBCode с PHP, он является нативным и не использует механизм регулярных выражений (медленно). Это решение будет , вероятно, будет самым быстрым.
Вы можете преобразовать парсер BBCode
[LOOP]<td><?php print $row->title; ?></td>[/LOOP]
в
<?php foreach($result as $row): ?><td><?php print $row->title; ?></td><?php endforeach; ?>
Просмотрите аргументы BBCode, чтобы узнать о передаче переменных в синтаксис [LOOP].
Вы можете посмотреть еще несколько примеров на странице метода bbcode_create .
Регулярные выражения
Они немного медленнее, но включены по умолчанию во всех установках PHP.
Кредиты, чтобы получить Gumbo для этого регулярного выражения (Вы должны проголосовать за него).
/\[LOOP]((?:[^[]+|\[(?=\/LOOP]))*)\[\/LOOP]/
Затем вы можете использовать его следующим образом.
if (preg_match('%\[LOOP\]((?:[^[]+|\[(?=/LOOP\]))*)\[/LOOP\]%i', $subject, $result)) {
# Successful match
# You can access the content using $result[1];
} else {
# Match attempt failed
}
-Mathew