Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как достать все {module:top}
 
 автор: Alba   (01.08.2009 в 17:29)   письмо автору
 
 

Всем привет!

Делаю простенький движок на шаблонах, в шаблоне встречаются такие блоки:


{module:top}
{module:left}
{module:right}
и т.д.


поделитесь, пожалуйста, куском кода который бы из текста выше сделал бы такой массив:


array('top', 'left', 'right');


т.е. нужно сложить все позиции шаблона в массив...

  Ответить  
 
 автор: EXP   (01.08.2009 в 17:49)   письмо автору
 
   для: Alba   (01.08.2009 в 17:29)
 

ничего не понятно из вопроса
<?
preg_match_all
(
'#\{module:(\w+)\}#',
'{module:top} 
{module:left} 
{module:right}'
,
 
$a);
print_r($a[1]);?>

  Ответить  
 
 автор: Alba   (01.08.2009 в 17:56)   письмо автору
 
   для: EXP   (01.08.2009 в 17:49)
 

по моему все понятно... но уже не важно, сам сделал :-)


<?php
preg_match_all
("|\{module:(.*?)\}|s"$_OUTPUT['template'], $matches);
print_r($matches);
?>


в принципе тоже самое что и у вас...

  Ответить  
 
 автор: EXP   (01.08.2009 в 18:59)   письмо автору
 
   для: 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($txt1000);

$re1 '#\{module:(\w+)\}#';
$re2 '#\{module:(.+?)\}#';
$re3 '#\{module:([^\}]+)\}#';


g_t();# засечка времени
$i 300;
$a = array();
while(--
$ipreg_match_all($re1$txt$a);
g_t(1);# вывод времени

g_t();# засечка времени
$i 300;
$a = array();
while(--
$ipreg_match_all($re2$txt$a);
g_t(1);# вывод времени

 
g_t();# засечка времени
$i 300;
$a = array();
while(--
$ipreg_match_all($re3$txt$a);
g_t(1);# вывод времени

?>

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования