Регулярки в preg_replace

satoved

Новичок
Регулярки в preg_replace

Допустим есть три html кода трех страниц.
В первой после </head> идет <body>
Во второй после </head> идет <body class="bodyy">
В третей после </head> идет <body align="center" class="get middle" style="width=1000px">
Все страницы в массиве. Нужно заменить <body***> в каждом на <body***>(мой код) , при этом сохранив все модификаторы body.
Пробовал
PHP:
$newcode =preg_replace("|<body([\s\S]+)>|",'<body$0>МОЙ КОД',$oldcode);
Но берется все от <body до </html> и заменятся.
Как решить проблему?

Заранее спасибо.
 

StiM

Новичок
Могу посоветовать программку The Regex Coach. Хорошая штука при составлении регулярных выражений.

-~{}~ 17.11.09 17:09:

PHP:
$newcode =preg_replace("<body([^>]+)",'<body$0>МОЙ КОД',$oldcode);
 

satoved

Новичок
StiM, спасибо, но так берется только <body, а мне надо скобку тоже
 

StiM

Новичок
Автор оригинала: satoved
StiM, спасибо, но так берется только <body, а мне надо скобку тоже
Смотри какая хитрость (во втором параметре) ;)
PHP:
$newcode =preg_replace("<body([^>]+)",'<body$0МОЙ КОД',$oldcode);
 

satoved

Новичок
"воруешь чужой контент?" Ничего я не ворую. Вы достали блин.
StiM, хитро, хитро )) спасибо.
 

StiM

Новичок
Автор оригинала: satoved
"воруешь чужой контент?" Ничего я не ворую. Вы достали блин.
StiM, хитро, хитро )) спасибо.
по большому счету никакой хитрости, просто логичный вывод ;) бывают ситуации, когда проще пересмотреть одно, чем париться с другим :)
 

satoved

Новичок
Как вам разница? Почему вы на морали переходите? Просто помочь нельзя?
 

satoved

Новичок
Да ну не в PHP смысл )) Это просто вспомогательное средство
 

freeek

Новичок
Re: Регулярки в preg_replace

Автор оригинала: satoved
Допустим есть три html кода трех страниц.
В первой после </head> идет <body>
Во второй после </head> идет <body class="bodyy">
В третей после </head> идет <body align="center" class="get middle" style="width=1000px">
Все страницы в массиве. Нужно заменить <body***> в каждом на <body***>(мой код) , при этом сохранив все модификаторы body.
Пробовал
PHP:
$newcode =preg_replace("|<body([\s\S]+)>|",'<body$0>МОЙ КОД',$oldcode);
Но берется все от <body до </html> и заменятся.
Как решить проблему?

Заранее спасибо.
все реги изначально жадные, а это значит, что твоя рега воспринимается как:

открывающий тег <body любой пробельный или непробельный символ хотя бы один раз (непонятно какой в этом смысл, тоже самое что масло масляное) и закрывающая тег обратная скобка

если учесть что реги изначально жадные, это соответсвует всему от <body до последнего в документе >,
в обычном случае от <body до html>, поэтому тут и очивиден результат


как решить? инвертировать жадность: модификатор U или ? после квалификатора

PHP:
echo preg_replace("%<body[^>]*>%isU", '$0kod', $oldkod);
 

Razdva

Новичок
Re: Регулярки в preg_replace


все реги изначально жадные, а это значит, что твоя рега воспринимается как:

открывающий тег <body любой пробельный или непробельный символ хотя бы один раз (непонятно какой в этом смысл, тоже самое что масло масляное) и закрывающая тег обратная скобка

если учесть что реги изначально жадные, это соответсвует всему от <body до последнего в документе >,
в обычном случае от <body до html>, поэтому тут и очивиден результат


как решить? инвертировать жадность: модификатор U или ? после квалификатора

PHP:
echo preg_replace("%<body[^>]*>%isU", '$0kod', $oldkod);

А как быть с моим вариантом?

Нужно открыть определенный файл в нем найти <body тут может быть что-то, а может и не быть> и заменить на такой же, но + мой текст, закрыть файл и сохранить.

Пример было:
<body id="page_bg" class="color_<?php echo $this->params->get('colorVariation'); ?> bg_<?php echo $this->params->get('backgroundVariation'); ?> width_<?php echo $this->params->get('widthStyle'); ?>">

Стало:
<body id="page_bg" class="color_<?php echo $this->params->get('colorVariation'); ?> bg_<?php echo $this->params->get('backgroundVariation'); ?> width_<?php echo $this->params->get('widthStyle'); ?>">
<b>Мой текст</b>

То есть после <body может быть все что угодно.
 

Yaponchick

Новичок
Духовность™
А я всегда на этом специализировался... эх, теперь я знаю как меня называют в "народе"...
 

fixxxer

К.О.
Партнер клуба
Зря признался, теперь чуть чего будем тебя слать обратно на серч/мастерх :D
 

Yaponchick

Новичок
Увы, что самое удивительное, я практически не задаю вопросов про граббинг )
 
Сверху