Чтобы добавить к ответу tandu, этот вариант учитывает также возврат каретки:
preg_replace(array('/\r/m','/\n{3,}/m'), array("\n","\n\n"), $text);
Сначала преобразуйте \r
в \n
, чтобы \r\n
последовательности были уменьшены до \n\n
. Затем фильтр для последовательных \n
завершает работу.