Использование строковых функций вместо регулярных выражений и допущение, что тег </h1>
может находиться в любом месте строки (вместо непосредственно перед новой строкой):
$lines=file($fn);
foreach ($lines as $line) {
if (stristr("$line", "</h1>") == FALSE) {
$line = str_replace("\n", "<br />", $line);
}
echo $line;
}
, что, для вашего примера, приводит к:
<h1>
Тест </h1>
некоторый тест здесь <br />
и здесь <br />