Как найти последовательность тегов в html-документе?

Есть переменная в php, которая содержит html.
Задача найти в нем конструкцию, в которой идет подряд от двух и больше тегов img и заменить общий контейнер.

Вот такую конструкцию:
<p>
<img src="">
<img src="">
</p>


Заменить на такую:

<div ...>
<img src="">
<img src="">
</div>


p. s. важный момент, что искать нужно именно по количеству тегов img, чтобы исключить ошибки.

Помоги пожалуйста строками кода, для меня этот вопрос из секции pro))
  • Вопрос задан
  • 2343 просмотра
Решения вопроса 1
@eandr_67
web-программист (*AMP, Go, JavaScript, вёрстка).
Проще всего это сделать с помощью регулярных выражений. Например, вот так:
$val=preg_replace('#<p[^>]*>\s*((?:<img\s[^>]+>\s*){2,})</p[^>]*>#is', '<div>$1</div>', $val);

Если же это не обязательно <p>, а любой тег, то:
$val=preg_replace('#<([[:alpha:]]+)(?:\s[^>]*)?>\s*((?:<img\s[^>]+>\s*){2,})</\g{1}(?:\s[^>]*)?>#is', '<div>$2</div>', $val);
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
t-alexashka
@t-alexashka
Сразу пишу legacy код
советую воспользоваться xpath.

для вашего примера что-то вроде:

//p/img[count() > 1]
Ответ написан
@dmitryosipov
Прошу код в студию
Ответ написан
@kbc590 Автор вопроса
<p>Нужно найти конструкцию ниже и заменить для нее контейнер.</p>
<p>
<img src="http://www.cps06.ru/_mod_files/ce_images/articles/screen_shot_2010-12-03_at_9.06.25_pm.png">
<img src="http://www.cps06.ru/_mod_files/ce_images/articles/screen_shot_2010-12-03_at_9.06.25_pm.png">
</p>
<p>И у такой.</p>
<p>
<img src="http://www.cps06.ru/_mod_files/ce_images/articles/screen_shot_2010-12-03_at_9.06.25_pm.png">
<img src="http://www.cps06.ru/_mod_files/ce_images/articles/screen_shot_2010-12-03_at_9.06.25_pm.png">
</p>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
27 апр. 2024, в 13:22
600 руб./за проект
27 апр. 2024, в 12:46
60000 руб./за проект