strip_tags in preg_replace?

  • Themenstarter Themenstarter Astror Enales
  • Beginndatum Beginndatum
A

Astror Enales

Hallo Forum.

also folgendes problem.
ich baue grade einen syntax-highlighter und habe das problem das er schlüsselwörter in texten ("....") und in kommentaren ebenfalls einfärbt.
das einfärben läuft wie folgt:
PHP:
    $keywords = '/\b(int|string|new|function|for|if|foreach|this|override)\b/';
    // Schlüsselwörter
    $code = preg_replace(
        $keywords, 
        "<span style='color: blue'>$1</span>",
        $code
    );
    // Texte "..."
    $code = preg_replace(
        '/"(.*?)"/', 
        "<span style='color: red'>&quot;$1&quot;</span>",
        $code
    );
    // Kommentare
    $code = preg_replace(
        '/(\/\/)(.+)\s/', 
        "<span style='color: green; background-color: white;'>$0</span>", 
        $code
    );
    $code = preg_replace(
        '/(\/\*.*?\*\/)/s', 
        '<span style="color: green; background-color: white;">$0</span>', 
        $code
    );

jetzt hatte ich überlegt, das man in das preg_replace der texte und kommentare ja ein strip_tags einbauen kann und es mit "<span style='color: red'>&quot;" . strip_tags("$1") . "&quot;</span>" probiert aber das funkt nicht, weil er wirklich nur das "$1" als text überprüft und nicht das ergebnis was dort eingesetzt wird.
Hat wer eine idee?
 
Hier allein auf reguläre Ausdrücke zu setzen, kann fatal sein. Denn wie du ja bereits selber feststellen musstest, reichen naive Suchen nach Übereinstimmungen nicht aus, da eben auch Falsches zu einer Übereinstimmung führt.
Was du bräuchtest ist ein richtiger Tokenizer, der den Code in die einzelnen Bestandteile der jeweiligen Sprache (Tokens) zerlegt.
 
Zurück