Подскажите, допустим у меня есть такая структура в html:
<div class="class1 ">
<a>link</a>
</div>
<div class="class2">
<a>link</a>
</div>
<div class="class1">
<a>link</a>
</div>
<div class="class2">
<a>link</a>
</div>
Мне нужна функция PHP которая найдет все div с классом class2 и внутри заменит <a> на <span>, но так, чтобы содержимое(то есть 'link') осталось неизменным.
Подскажите как это сделать пожалуйста
Можете воспользоваться библиотеками наподобие Simple HTML DOM:
$html = str_get_html($txt);
foreach($html->find(".class2 a") as $a){
$a->outertext = "<span>" . $a->innertext . "</span>";
}
echo $html;
Ещё один вариант - регулярные выражения (но вариант с Simple HTML DOM предпочтительней):
$txt = preg_replace_callback(
'~<div[^>]+class="class2"[^>]*>\K(.+?)(?=</div>)~s',
function($m){
return preg_replace('~<a[^>]*>(.+?)</a>~', '<span>$1</span>', $m[1]);
},
$txt
);
echo $txt;
См. Демо
Сборка персонального компьютера от Artline: умный выбор для современных пользователей