главная/PHP preg_replace: Как удалить / заменить первый тэг в строке
php-replace-first-tag-in-string

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 );