, если вы хотите использовать регулярное выражение, это работает для меня:
$str = preg_replace("/<h1>.*?<\/h1>/si", '', $str);
Знак вопроса переключает содержимое между тегами, чтобы они не были жадными. Это необходимо для случая, когда у вас есть несколько тегов h1, поэтому он всегда будет переносить содержимое между каждым из них, а не удалять все между первым открытием [h1] и последним закрытием [/ h1]
Модификатор 'i' говорит, что игнорирует разницу прописных / строчных букв, а 's' говорит, что работает многострочно.