Mailinglisten-Archive |
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