|
|
|
| Всем привет!
Делаю простенький движок на шаблонах, в шаблоне встречаются такие блоки:
{module:top}
{module:left}
{module:right}
и т.д.
|
поделитесь, пожалуйста, куском кода который бы из текста выше сделал бы такой массив:
array('top', 'left', 'right');
|
т.е. нужно сложить все позиции шаблона в массив... | |
|
|
|
|
|
|
|
для: Alba
(01.08.2009 в 17:29)
| | ничего не понятно из вопроса
<?
preg_match_all(
'#\{module:(\w+)\}#',
'{module:top}
{module:left}
{module:right}',
$a);
print_r($a[1]);?>
|
| |
|
|
|
|
|
|
|
для: EXP
(01.08.2009 в 17:49)
| | по моему все понятно... но уже не важно, сам сделал :-)
<?php
preg_match_all("|\{module:(.*?)\}|s", $_OUTPUT['template'], $matches);
print_r($matches);
?>
|
в принципе тоже самое что и у вас... | |
|
|
|
|
|
|
|
для: Alba
(01.08.2009 в 17:56)
| | и всётаки если экономить на спичках ;)
то (.+?) \) работает помедленнее чем например жадное ([^\}]+)\}
ему не приходится заглядывать вперёд и сравнивать каждый следующий символ с \}
примерно так можно заметить
<?
###################################
$time=0;
function g_t($bool=false){ //время
global $time;
list($m, $s) = sscanf(microtime(), '%f %u');
if($bool) {
printf("\n%.7f<hr/>", (($m += $s) - $time));
flush();
}
else $time=$m + $s;
}##################################
# для замера времени
$txt = '{module:top}
{module:left}
{module:right}
';
$txt = str_repeat($txt, 1000);
$re1 = '#\{module:(\w+)\}#';
$re2 = '#\{module:(.+?)\}#';
$re3 = '#\{module:([^\}]+)\}#';
g_t();# засечка времени
$i = 300;
$a = array();
while(--$i) preg_match_all($re1, $txt, $a);
g_t(1);# вывод времени
g_t();# засечка времени
$i = 300;
$a = array();
while(--$i) preg_match_all($re2, $txt, $a);
g_t(1);# вывод времени
g_t();# засечка времени
$i = 300;
$a = array();
while(--$i) preg_match_all($re3, $txt, $a);
g_t(1);# вывод времени
?>
|
| |
|
|
|