Фрагмент кода:
...
<div>
<div class="product-title">
<a href="#">Title<span class="last-word">4.0</span></a>
</div>
</div>
...
Нужно убрать:
<div class="product-title">
<a href="#">Title<span class="last-word">4.0</span></a>
</div>
Моя проба:
#<div class="product-title">\s*.+\s*<\/div>#ui
P.S. Моя проба рабочая, но я видел более универсальное решение, так как внутри могут быть и другие теги (кроме <div>)
Вариант, который вырезает элемент любого типа(тег должен быть сбалансированым), у которого определен класс product-title (классов у элемента может быть несколько) вместе со всеми дочерними элементами(если есть) любой вложенности. Теги дочерних элементов могут быть несбалансированными(например: <input ... />) или отсутствовать вовсе. Шаблон не чувствителен к форматированию текста.
Для извлечения тегов элементов, в шаблоне используются: backreferences; модификатор s - метасимвол . включает также и перевод строк.
<?php
$input = <<< EOT
<div>
<div class="product-title">
<a href="#">Title<span class="last-word">4.0</span></a>
</div>
</div>
EOT;
$output = preg_replace(
"#<([A-Z][A-Z0-9]*)\b[^>]*?\bclass=\".*?\bproduct-title\b.*?\">[^<]*?(?:<([A-Z][A-Z0-9]*)\b[^>]*?>.*?(?:</\\2>)?)?[^<]*?</\\1>#sui",
"",
$input
);
echo $output;
Пример с более сложной иерархией дочерних элементов у вырезаемого элемента
Сборка персонального компьютера от Artline: умный выбор для современных пользователей