как верно написать регулярное выражение на php

php регулярные выражения

Нужно что бы вначале и в конце вставился текст "222"
Код:
<div class="news2">
<div class="snews">111
<div class="text" style="text-align:left;">
<div class="product">
111
</div>
111
</div>
</div>
<div class="ninfo">&nbsp; &nbsp;</div>
</div>

Попробовал так:
preg_replace ( "'\<div class=\"news2\">(.*?)\</div>'si", "222<div class=\"news2\">\\1</div>222", $str );

Но в результате получаю:
222<div class="news2">
<div class="snews">111
<div class="text" style="text-align:left;">
<div class="product">
111
</div>222
111
</div>
</div>
<div class="ninfo">&nbsp; &nbsp;</div>
</div>

Может кто-то тюкнет меня носом в ошибку?
Ответы:
Нет, ошибка-то в том, что preg_replace не "жадный", и просто находит первое вхождение </div>
А вот как в общем случае сделать чтобы работало -- сходу не придумывается. По-хорошему нужен парсер html-а.
у меня нормально работает, используя жадную квантификацию. Не понимаю, почему вы собираетесь использовать ленивое выражение (.*?)
ну и, думаю, тут вы просто опечатались в нескольких местах:
"\</div>" вместо "<\/div>". Символ "<" вообще экранировать не надо...
ну и искал я без модификатора si - посчитал, что ни к чему....
и, мой Вам совет... используйте $1 вместо \\1, а пробелы в регулярном выражении корректней заменять на \s : <div\sclass


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.