Вам нужны разделители регулярных выражений, отличные от тех, которые вы эффективно используете (угловые скобки) И косая черта на закрывающем теге. Я также рекомендую захватить открывающий тег и требовать, чтобы закрывающий тег был таким же.
preg_match('!<(h[1-3])[^>]*>(.*?)</\1>!i', $text, $matches);
echo $matches[1];