PHP preg_replace: Как удалить / заменить первый тэг в строке
Недавно, понадобилось удалить первый html тэг в excerpt строке. Причем не абы какой, а только если это заголовок h1-h6.
Ниже набросал функцию с регуляркой preg_replace. Удалятся будет первый заголовок с его содержимым. А если точнее сказать, он будет не удалятся, а заменятся на пустую строку.
function custom_excerpt_cleaner( $excerpt ) {
$replaced = preg_replace( '/<h\d(.*?)\/h\d>/', '', $excerpt, 1 );
$excerpt = is_null( $replaced ) ? $excerpt : $replaced;
return $excerpt;
}
Если нужно заменить не просто первый заголовок, а еще что-бы он был первый в строке, добавьте в начале паттерна модификатор \A. В результате, паттерн будет выглядеть так: '/\A<h\d(.*?)\/h\d>/'
Удалить или заменить первый див в строке
Теперь, допустим вам надо удалить первый div, для этого можете использовать модифицированную ниже регулярку.
$excerpt = '<div>123</div> lorem ipsum <div>456</div>';
$replaced = preg_replace( '/<div(.*?)<\/div>/', '', $excerpt, 1 );
var_dump( trim( $replaced ) );
Или например заменим этот div на на параграф с текстом Hello. Меняем второй параметр в функции на ‘<p>Hello</p>’ и готово.
$replaced = preg_replace( '/<div(.*?)<\/div>/', '<p>Hello</p>', $excerpt, 1 );