Reguläre Ausdrücke, bin am verzweifeln!
André Mantz
- php
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é
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
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é
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
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
