phpbar.de logo

Mailinglisten-Archive

[php] Zeichen zwischen Begrenzern aus Text entfernen

[php] Zeichen zwischen Begrenzern aus Text entfernen

Sven phpbar at koalashome.de
Mit Okt 22 12:33:22 CEST 2003


Hallo

Ich habe hier Texte (Dateien) die mit Kommentaren versehen sind.
Ein Beispiel:

--- cut --- schnipp --- schnapp ---
Ich bin ein Text.
{* und ich ein Kommentar im Text *}
Und hier ist noch eine Textzeile.
--- cut --- schnipp --- schnapp ---

Aus diesen Texten möchte ich nun vor der Ausgabe die Kommentare entfernen.
Das gelingt mir mit dieser kleinen Funktion:

--- cut --- schnipp --- schnapp ---
  function delete_comment($str) {
    
    $left_delimiter = '{*';
    $right_delimiter = '*}';

    // Quote regular expression characters
    $ldq = preg_quote($left_delimiter, '!');
    $rdq = preg_quote($right_delimiter, '!');

    $str = preg_replace("!$ldq(.*?)$rdq!se", "", $str);
    return $str;
  }
--- cut --- schnipp --- schnapp ---

So weit, so gut. Bei solch einfachen Kommentaren wie im Beispiel funktioniert 
es, wie es soll.
Ausgegeben wird nur noch:

--- cut --- schnipp --- schnapp ---
Ich bin ein Text.
Und hier ist noch eine Textzeile.
--- cut --- schnipp --- schnapp ---


Nun habe ich aber das Problem, dass es manchmal auch 
Kommentarverschachtellungen gibt.
z.B.:

--- cut --- schnipp --- schnapp ---
Ich bin ein Text.
{* und ich ein Kommentar im Text {* Ich bin ein Kommentar im Kommentar *} *}
Und hier ist noch eine Textzeile.
--- cut --- schnipp --- schnapp ---

Aber nun bleibt nach dem Funktionsdurchlauf noch der letzte 
Kommentarbegrenzer '*}' stehen.
Irgendwie müsste ich also die Funktion so abändern, dass erst nachgesehen 
wird, ob es im Kommentar noch einen weiteren Kommentar gibt, und dann erst 
der innerste Kommentar gelöscht wird und dann der äusserste.

Mir fehlt hier ein Ansatz, wie ich das mit dem Vorhandensein von inneren 
Kommentaren überprüfen könnte.
Hat da jemand einen Denkanstoß für mich?


-- 
Koala


php::bar PHP Wiki   -   Listenarchive