Mailinglisten-Archive |
Hallo Stefan,
Stefan Brueckmann wrote:
> Hallo Liste,
>
> ich möchte Text zwischen einem Anfangsmarker und dem nächsten
> Endmarker löschen
>
> Also wie folgt:
>
> $inhalt = "
> /**<!no_comment>
> irgendwelche sinnreichen Kommentare
> <!/no_comment>*/
> wichtiger Code
> /**<!no_comment>noch ein Kommentar <!/no_comment>*/
>
> mehr wichtiger Code
> ";
>
>
> Raus kommen soll folgendes
> $inhalt = "
> wichtiger Code
>
> mehr wichtiger Code
> ";
>
>
> Mein Ansatz ist folgender
> $inhalt = ereg_replace("/\*\*<!no_comment>(.*)<!/no_comment>\*/", "",
> $inhalt);
>
> Nur löscht der mir alles zwischen dem ersten Anfangsmarker und dem
> Endmarker
>
> Also es kommt leider folgendes heraus:
> $inhalt = "
> mehr wichtiger Code
> ";
>
> Und wie jeder sieht, fehlt dann ja wichtiger Code ;-)
>
> Wie muss ich als ändern?
verwende besser *preg* die alten ereg funktionen sind nicht so performant.
Das Problem an deinem Pattern ist, dass "/.*/" zu gefräßig ist. Du muss
ihm sagen, dass er nur das nötigste matchen soll. Dies tust du mit "/.*?/".
Der Code müsste dann funktionieren:
$inhalt =
preg_replace('|/\*\*<!no_comment>.*?<!/no_comment>\*/|s','',$inhalt);
grüße
Martin
php::bar PHP Wiki - Listenarchive