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