phpbar.de logo

Mailinglisten-Archive

[php] Mehrfaches Löschen von beliebigem Inhalt zwischen Anfangs und Endmarker

[php] Mehrfaches Löschen von beliebigem Inhalt zwischen Anfangs und Endmarker

Martin Adler martin.adler at continum.net
Fre Apr 21 16:57:30 CEST 2006


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