Bisogna tenere conto oltre che del new line anche dei carriage return (in windows), così dovrebbe funzionare:

Codice PHP:
$testo0=preg_replace('/((\r)?\n){3,}/'"\n\n"$testo0);