Нужно местами поменять $pattern и $text
Также советую использовать .+? вместо .+, т.к. в противном случае регулярка будет искать последнее вхождение в строке.
$text="fhdsklf sdoijf ds <h1>jfidsfj</h1> jklsfdjflks";
$pattern ="!<h1>.+?</h1>!";
preg_match($pattern, $text, $matches);
print_r($matches);