Hi Sebastian!
Erstmal danke für deine Antwort!
Ich möchte in einem String alle Zeilenumbrüche (\n) durch ein Leerzeichen ersetzten und alle Wagenrückläufe (\r) entfernen, außer zwischen den HTML-Tags <pre> und </pre> bzw. <textarea> und </textarea>.
Ich verstehe die prinzipielle Aufgabenstellung und wundere mich, daß es mit regulären Ausdrücken nicht funktioniert.
Ich bin meinem Ziel inzwischen etwas näher gekommen:
$content = preg_replace("/((<pre>[^(</pre>)]*)|\n)/e", '"\2"=="\1" ? "\1" : " "', $content);
$content = preg_replace("/((<pre>[^(</pre>)]*)|\r)/e", '"\2"=="\1" ? "\1" : ""', $content);
Damit bleibt der Text zwischen <pre> und </pre> unverändert. Aber wenn ich die gleichen Ausdrücke auf das <textarea>-Tag anwende funktioniert es nicht mehr:
$content = preg_replace("/((<textarea>[^(</textarea>)]*)|\n)/e", '"\2"=="\1" ? "\1" : " "', $content);
$content = preg_replace("/((<textarea>[^(</textarea>)]*)|\r)/e", '"\2"=="\1" ? "\1" : ""', $content);
Und ich habe noch ein bisschen weiter experimentiert. Bei folgenden (erdachten) Tag-Kombinationen funktioniert es z. B.:
<pr></pr>
<tex></tex>
<text></text>
Dagegen funktioniert es nicht mit:
<asdf></asdf>
<texta></texta>
<textar></textar>
<textare></textare>
Mir ist diese Verhalten vollkommen unerklärlich...
Woher kommt denn der String? Einfacher und sicherer wäre es vielleicht, wenn man einzelne Teilstrings unterschiedlich behandeln würde.
Der String enthält die gesamte Ausgabe eines kleinen CMS.
Das Entfernen ginge dann mit
$string = ereg_replace("(\r\n|\n|\r)","",$string);
Mit einem ähnlichen Ausdruck arbeite ich bereits, aber damit habe ich halt das Problem mit den Textareas.
Falls <pre>, <textarea> </pre> und </textarea> jeweils nur einmal vorkommen, könntest Du den String ja ggf. an genau dieser Stelle aufsplitten.
Das habe ich mir auch schon gedacht, aber da ich nicht von vornherein weiß, wieviele <pre> und <textarea>-Bereiche es in dem String gibt (sie können also auch mehr als einmal vorkommen) würde das bloß ein Konstrukt aus einer Reihe von Schleifen und Arrays zum zwischenspeichern - das wäre nur die absolute Notlösung...
Hat noch irgendjemand eine Idee?
CU :-)
Stefan