Mailinglisten-Archive |
Niels Runge wrote: >>>>> If >>>>> (preg_match("'\[(center|left|right)\](.*?|(.*?\n*?.*?)*)\[(/center|/left|/ri >>>>> ght)\]'", $content)) >>>>> >>>>> >>>> Schnell-guess: >>>> Alle Backslashes müssen doppelt sein, da sie in einem String sind... \n >>>> ist sonst zum Beispiel ein Zeilenumbruch... >>>> >>>> >>>> >>> dann wäre hiermit wohl geholfen >>> http://php.net/preg_quote >>> >> Nein... Denn das problem besteht schon, bevor du den Text durch diese >> Funktion jagen könntest... >> Denn "\n" enterpretiert der php-Parser sofort als Zeilenumbruch und >> nicht als \n. >> > hmm, vielleicht meinst Du etwas anderes aber ansonsten ist folgendes > doch kein Problem > > list($str_mit_nl) = $db->query('SELCT foo as "0" FROM bar"); > // foo enthält dann einen Text der Zeilenumbrüche enthält > > $str_mit_doppel_nl = str_replace("\n", "\n\n", $str_mit_nl); > > Es ist spät, vielleicht stehe ich auch auf dem Schlauch oder Du meinst > etwas anderes ;-) ähm ja... Also ich hol' mal gaaaaannz weit aus, damit wiklich kalr ist, was ich meine: Also ein String besteht ja eigentlich ein array mit Zahlen, die die Buchstaben representieren... Und es gibt eben auch eine Zahl für Zeilenumbrüche: http://www.lookuptables.com/ Also Nummer 10. (bzw. Windows verwendet sogar 10 und dann noch 13 (voll unnötig *gg*). Wenn php jetzt einen String parst: "abc\ndef" Dann achtet der php-Parser beim parsen auf backslashes (\). Wenn das Zeichen nach dem Backslash ein 'n' ist, ersetzt php Das \n durch ein neue-Zeilezeichen (10)). \t wird dabei übrigens auch noch durch Tab ersetzt. Und \\ wird durch \ ersetzt. Also print("ab\ncd"); gibt ab cd aus und nicht ab\ncd Und print("ab\\ncd"); gibt ab\ncd aus. Also muss dein regexaufruf so aussehen: "'\\[(center|left|right)\\](.*?|(.*?\\n*?.*?)*)\\[(/center|/left|/right)\\]'" So. Ich hoffe wir haben jetzt nicht total aneinander vorbeigeredet und du hast mir das gleich um die Ohren *gg*. Ich kann mir nämlich auch das \n in deinem String nicht ganz erklären. Wenn du willst, dass in dem text auch Zeilenumbrüche vorkommen dürfen (was sehr wahrscheinlichj ist, solltest s-Modifiere benutzen. Dann sieht dein regex so aus: "'\\[(center|left|right)\\](.*?|(.*?)*)\\[(/center|/left|/right)\\]'s" Wobei ich den regex auch so noch nicht ganz verstanden habe... Eigentlich sollte das schon reichen: "'\\[(center|left|right)\\](.*?)\\[(/center|/left|/right)\\]'s" > > Gruß > Niels
php::bar PHP Wiki - Listenarchive