André Mantz: Reguläre Ausdrücke, bin am verzweifeln!

Moin zusammen,

ich habe ein Problem mit regulären Ausdrücken und komme einfach nicht weiter.
Problemstellung: ein Text (z.B. aus einem Forumlarfeld TEXTAREA) soll auf einfache und mehrfache Zeilenumbrüche durchsucht werden. Einfache Zeilenumbrüche sollen durch <br>, mehrzeilige durch </p><p> ersetzt werden. Zudem soll das ganze sowohl auf Unix als auch auf Windows basierten Systemen laufen.

Ich habe erst mal versucht, sämtliche mehrfachen Zeilenumbrüche zu finden (2fach oder mehrfach). So gehts auf jeden Fall nicht:

$muster = "/([!\n\r])[\n\r]+?([!\n\r])/";
$ersatz = "$1</p><p>$2";
$neuer_text = preg_replace($muster, $ersatz, $altertext);

Hat jemand vielleicht einen Tip für mich? Danke!

Gruß, André

  1. Hi,

    $muster = "/([!\n\r])[\n\r]+?([!\n\r])/";

    Zuerst ein Ausrufezeichen, Zeilenumbruch oder Wagenrücklauf.
    Danach ein oder mehrere Zeilenumbrüche/Wagenrückläufe.
    Zum Schluß nochmal ein Ausrufezeichen, Zeilenumbruch oder Wagenrücklauf.

    Was versprichst Du Dir von den Ausrufezeichen?

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Was versprichst Du Dir von den Ausrufezeichen?

      Oh man ... das wars. Vor lauter PHP hab ich schon das Ausrufezeichen als Verneinung benutzt. Da muß natürlich ein ^ hin, dann klappt’s auch mit der Nachbarin ... äh dem Script!

      Danke für den Anschubser.

      Gruß, André

  2. Grüße,
    gehöre zwar nicht zu den könnern, aber dass nach \r\n z usuchen evtl nichts bring glaube ich zu wissen - afaik wird \r erst beim schreiben in eine (windows?)textdatei erzeugt.. vltl irre ich mich aber auch - IMOHO, AFAIK, ohne gewähr, ich bin doof
    MFG
    bleicher

    --
    __________________________-
    Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
    Lieber bereuen gesündigt zu haben, als nicht sündigen und es später trotzdem bereuen.
    Boccaccio
  3. Hello,

    $muster = "/([!\n\r])[\n\r]+?([!\n\r])/";

    Zeilenumbrüche lauten entweder

    \r     0D      MAC
      \n     0A      UNIX/Linux
      \r\n   0D0A    DOS, sowie in RFCs für eMail usw.

    von den Browsern sollten unvollständige Zeilenumbrüche, die also nur \n oder nur \r enthalten unabhängig vom System, auf dem der Browser läuft, zum Zwecker der Versendung der Daten als HTTP-Parameter immer zu \r\n = 0D0A ergänzt werden.

    Wer weiß aber, bb das aber immer eingehalten wird...
    Wenn Du also suchen willst, dann suche erst nach kompletten Pärchen \r\n und dann nach den einzelnen Zeichen.

    Vielleicht ist es am einfachsten, die so gefundenen Zeichen erst durch ein Ersatzzeichen auszutauschen; das vereinfacht dann das Auffinden von Mehrfachvorkommen. Es könnte ja immerhin sein, dass ein verrückter Browser

    \r\nnun kommt noch etwas Text\rund dann geht es weiter\nund immer weiter\r\nund irgendwann...

    soawas schickt. Das willst Du doch sicher auch korrigieren?

    Harzliche Grüße vom Berg
    http://bergpost.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)