Проблема в том?> Что @Nigel Ren упомянул в комментарии. Символ /? Шаблон может быть опущен, потому что * это делает его.
//$html = preg_replace('#(<br *>\s*)+#i', '<br />', $html);
Проблема также возникает, когда строки вроде
$string = "?>xxxx";
должны быть закомментированы. В таком случае ? можно заменить на \ x3f (Примечание: в двойных кавычках!).
$string = "\x3f>xxxx";
Это та же строка для PHP, но не конечный тег PHP.