Рег printbox

Name

Новичок
Рег printbox

Есть такая муть, находит printbox в документе, оставляет только то что внутри
"/\<body[^>]*>(.*?)\<\!-- print --\>(.*?)\<\!-- \/print --\>(.*?)\<\/body\>/si";

Как бы сделать чтобы если таких блоков много, чтоб находил все.
 

.des.

Поставил пиво кому надо ;-)
тебе именно все из <body>.*?</body> нужно заменить?
тогда два рега.. лучше всего. вырезаешь все body а потом регом проходишь по нему и заменяешь printbox
 

Name

Новичок
Что то не выходит, чтоб вырезать все printbox понятно
$search[3] = "/\<\!-- print --\>(.*?)\<\!-- \/print --\>/si";
но помимо этого надо удалить все что за пределами.


Раньше делал так, находит только один printbox
$search[3] = "/\<body[^>]*>(.*?)[\<\!-- print --\>(.*?)\<\!-- \/print --\>]+(.*?)\<\/body\>/si";
$replace[3] = '<body>\\2</body>';
preg_replace($search,$replace,$content);

Может можно что то добавить чтоб оставлял содержимое всех <!-- print -->222<!-- /print -->
 

Demiurg

Guest
не нужны тебе реги. просто находи положения '<!-- print -->' и '<!-- /print -->' и вырещай то, что тебе не надо.
 

Name

Новичок
Да я как бы в курсе, уже решал эту задачу через substr, substr_replace, ...
Для облегчения функций написал универсальных типа cool_substr.
Потом померял время с регами, все тоже самое.

Для красоты так сказать решения, решил сделать
$search[1]=...
$replace[1]=...

$search[2]=...
$replace[2]=...

и потом только
return preg_replace($search,$replace,$content);
и все ничего лишнего.
 

Demiurg

Guest
>Потом померял время с регами, все тоже самое.
значит плохо писал :)
 

.des.

Поставил пиво кому надо ;-)
preg_match_all("/<!--print-->(.*?)<!--\/print-->/",$str,$m);
Далее из массив $m достаешь свои совпадения и снова их в строку. Что сложного?
 

Name

Новичок
Тут уже дело приципа, обойтись одним preg_replace, мать его.
 

.des.

Поставил пиво кому надо ;-)
а ну ну.. потом не удивляйся если твой рег будет работать на порядок медленнее чем несколько последовательных регов или иных функций, дающих тот же результат.
 
Сверху