Hallo,
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>.
Tja, dafuer sind RegExe IMHO ungeeignet. Dafuer brauchst du einen
Parser.
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);
Das matcht auch auf <pre>sdasdsadasd<, usw
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...
Mir nicht. In [] gibst du *Zeichenklassen* an. Das heisst, nur ein
einziges beliebiges Zeichen innerhalb von [] muss vorkommen, damit
diese Stelle gematcht wird. Beispiel: [abcd] matcht auf 'a', 'b',
'c', 'd' aber auch auf 'abcd' oder 'baxcsdf'.
Hat noch irgendjemand eine Idee?
Schreibe einen sinnvollen Parser oder schreibe die Inputs vom CMS um.
Gruesse,
CK