Я хочу это:
<h2>My Headline</h2>
к этому:
<span class="h2">My Headline</span>
Я пробовал это, но это всего лишь способ удалить h-tag с содержимым:/
$introtext = preg_replace('/<h2[^>]*>([\s\S]*?)<\/h2[^>]*>/', '', $introtext);
Может быть, есть решение "преобразовать" все h-теги в теги span с правильным классом?
Спасибо за поддержку.
Еще одна идея изменить теги:
$introOld = array('/<h2>/','/</h2>/');
$introNew = array('<span class="h2">','</span>');
$introtext = preg_replace($introOld, $introNew, $introtext);
Может быть, это поможет показать, что я имею в виду/хочу.
У меня есть контент ($ introtext) и виды (тизер [categoryView] и детали [articleView]). Для categoryView я хочу изменить все h-теги на теги span, из-за описания категории. Если отображается ItemView, h-теги в порядке.
Для записи: Markup (HTML/XML) и Regex не очень хорошо смешиваются. Регулярные выражения просто не могут справиться со сложностями языков разметки, поэтому любая попытка обработки разметки с использованием регулярного выражения в конечном итоге закончится. К счастью, PHP имеет парсер DOM, который вы можете использовать, что делает относительно легким сделать то, что вы хотите сделать:
$dom = new DOMDocument();
$dom->loadHTML($yourMarkup);
$headers = $dom->getElementsByTagName('h2');
foreach ($headers as $header)
{
$span = $dom->createElement('span', $header->nodeValue);//create span with h2 value
$span->setAttribute('class', 'h2');
$header->parentNode->replaceChild($span, $header);//replace element
}
Конечно, этот код является несколько подробным, но тогда DOM api имеет тенденцию быть подробным. В любом случае DOMDocument
, DOMElement
и DOMNode
хорошо документированы. Прочитайте документы, сделайте заметки и взломайте.
</span>
, а не</h2>
. Кроме того, почему вы хотите это сделать? Может быть лучшее решение (например, изменение стиля ваших элементовh2
с помощью CSS). Также: stackoverflow.com/a/1732454/300836