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