Спарсил информацию.
Получил несколько строк, которые содержат текст, обрамленный в теги с классами, хочу их либо заменить либо удалить.
Как это можно сделать, чтобы не пострадал текст?
Первая строка:
<div class="cm-par-large">Это пример первого текста, где нужно заменить обрамляющий div с классом на обычный <p></div>
Должно получиться так:
<p>Это пример первого текста, где нужно заменить обрамляющий div с классом на обычный</p>
Следующая строка
<div class="cm-par-medium wysiwyg-component"> <p style="line-height: 19.2pt; margin: 0cm 0cm 15.0pt 0cm;"><span>Это пример второй строки из которой нужно удалить обрамляющие дивы но не трогать p span</span></p>
</div>
Она же на выходе:
<p style="line-height: 19.2pt; margin: 0cm 0cm 15.0pt 0cm;"><span>Это пример второй строки из которой нужно удалить обрамляющие дивы но не трогать p span</span></p>
В голове только идея перебрать все div
, извлечь из них тексты и обернуть при необходимости в нужные теги, но как-то это сложновато, может быть, есть какая-то регулярка, которая позволяет удалять края, но не трогать содержимое?
Вот вам пример, изучайте:
<?php
$string = '<div class="cm-par-large">Это пример первого текста, где нужно заменить обрамляющий div с классом на обычный </div>
Текст без тегов.
<div class="cm-par-medium wysiwyg-component"> <p style="line-height: 19.2pt; margin: 0cm 0cm 15.0pt 0cm;"><span>Это пример второй строки из которой нужно удалить обрамляющие дивы но не трогать p span</span></p>
</div>
';
// Массив с regex шаблонами
// (добавлен модификатор "x" для комментирования внутри шаблонов)
$pattern = [
// 1-й шаблон для поиска и замены текста в контейнерах <div> :
'~
<(div)[^>]*> # Ищет <div(тут любой не обязательный текст)>
(.+?) # Ищет любой текст (вхождение символов тут обязательно)
</\1> # Ссылка на подмаску №1 (эквивалентно имени тега "div")
~x',
// 2-й шаблон для поиска и замены тегов <div> :
'~
<(div)[^>]*> # Ищет <div(тут любой не обязательный текст)>
| # Оператор ветвления (ИЛИ)
</(?1)> # Рекурсивная ссылка на подмаску №1 (эквивалентно имени тега "div")
~x'
];
// Массив значений для подстановки
$replace = ['<p>$2</p>', ''];
echo preg_replace($pattern, $replace, $string);
Если вам не нужно удалять атрибуты во всех возможных воображаемых случаях, то можно сделать совсем просто:
$result = preg_replace('#<div[^>]+>#i', '<div>', $string);
Помните, что парсить HTML регулярками - это дорога в ад.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Есть картинка в виде бинарных данных взятых из базы (тип поля image), как из них получить картинку и вывести в верстку?
Есть функция f(), не принимающая параметров и содержащая другие функции f1, f2, f3, f4, expectДругие функции (f1, f2, f3, f4, expect) описаны в подключаемом файле