gudn tach klaus!
ich möchte im bereich zwischen [html] .... und [/html] alle \n entfernen.
sicher nur alle \n? oder vielleicht auch alle \r?
geht das irgendwie mit $text = preg_replace ("~[html] [/html]~Uism", "\1", $text);
??
naja, so aehnlich.
im falle von wirklich bloss der ersetzung von \n, sollte folgendes funzen.
$text = preg_replace("/(\[html\])(.*?)(\[\/html\])/ise", '"\1".str_replace("\n","","\2")."\3"', $text);
([html]) matcht [html]
([/html]) matcht [/html]
(.*) wuerde gierig (greedy) alles matchen bis zum letzten vorkommnis von [/html], falls aber mehrere solcher [html]-beriche vorkommen sollten, willst du das wahrscheinlich gar nicht.
(.*?) ist die loesung dafuer, weil bloss ungreedy (also bis zum _naechsten_ [\html]) gesucht wird.
(.*?) matcht also immer die bereiche, in denen du die \n loeschen willst.
zu den modifiern:
i -> case-insensitive, d.h. [html] wird behandelt wie [HTml] usw.
musst selbst wissen, ob du das wirklich willst.
s -> der punkt . matcht auch auf zeilenumbrueche
e -> im ersetzen-string darf php-code enthalten sein (in diesem fall ein aufruf von str_replace)
so der rest '"\1".str_replace("\n","","\2")."\3"'
ist bloss noch eine konkatenation der gematchten strings
\1 -> [html]
\2 -> alles dazwischen
\3 -> [/html]
str_replace ersetzt hier bloss die \n durch den leeren string.
mit \r und \n koennte das dann ungefaehr so aussehen:
$text = preg_replace("/(\[html\])(.*?)(\[\/html\])/ise", '"\1".str_replace(array("\n","\r"),array("",""),"\2")."\3"', $text);
~~~.
prost
seth