Hi,
$txt =~ s/[\r\n]+/\n\n/g;
Das würde funktionieren, wenn auch einzelne Zeilenumbrüche ersetzt werden sollen.
Es soll aber erst bei mehr als zweien eine Ersetzung stattfinden.
Und da funktioniert [\r\n] nicht - denn [\r\n]{3,} würde auch schon auf 1,5 Windows-Zeilenumbrüche (\r\n\r) matchen.
(?:\r\n|\n\r|\r|\n){3,} würde passen. Achtung: die Reihenfolge ist entscheidend - zuerst die längeren, dann die kürzeren Auswahlmöglichkeiten (ob noch weitere als die 4 angegebenen Varianten vorkommen, weiß ich nicht, müßten halt ggf. noch eingefügt werden.
Allerdings blieben dann einzelne Windows-Zeilenumbrüche \r\n erhalten und werden nicht zu \n geändert. Das wäre in einem weiteren Schritt zu tun.
[] legt eine Klasse von Zeichen fest
[\r\n] die "Zeichen" \r und \n gehören nun zur Klasse
[\r\n]+ die Zeichen der Klasse können mehrfach auftreten
Ersetzt wird, egal ob ein \n oder ein \r matscht, jeder match durch \n\n was einheitlich zu einer Leerzeile wird.
paßt nur leider nicht zur Aufgabenstellung.
cu,
Andreas
Warum nennt sich Andreas hier MudGuard?
O o ostern ...
Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.