Datei Prüfung - Alles was zwischen /* und */ steht, einfärben.

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Datei Prüfung - Alles was zwischen /* und */ steht, einfärben.

    Hallo,

    ich könnte Hilfe gebrauchen bei von Inhalten in einer Datei zur Prüfung.

    Zwischen der Zeichenfolge /* und */ soll jede Zeile eingefärbt werden. Wie man sehen kann handelt es sich um einen mehrzeiligen Kommentar.
    Bsp:
    zeile1
    /*
    zeile3
    zeile4
    zeile5
    */
    zeile6
    Also soll zeile3, zeile4 und zeile5 eingfärbt werden, wenn sie von /* und */ eingeschlossen sind.

    Ausgabe:
    PHP-Code:
    echo "<div class='file-content-frame'><div class='file-content-line'>".($line_num+1)."</div><div class='file-content comment'>"htmlspecialchars($line) ."</div></div>";
    echo 
    "<style>.comment { background-color: #0B610B; color: #fff; }</style>";​ 
    Ich weiß nicht ob die Ausgabe mit einer if Anweisung umschlossen werden kann die mit preg_match agiert und wenn ja wie sieht das Suchmuster aus, dass ja sehr kryptisch dargestellt wird mit den ganzen Sonderzeichen.
    Und gibt es noch den Punkt zu beachten, wenn dieser Fall mehrmals in einer Datei vorkommt.
    Schwierig wird es wohl auch, ob man überhaupt prüfen kann, ob ein Zeichenpaar, also /* ... */ auch eindeutig erkannt werden kann.
    Was ist wenn dieser Fall /* zeile2-5 /* zeile7-10 */ zeile12-15 */ eintritt.

  • #2
    In deinem Beispiel endet der Kommentar in Zeile 11.
    Die Zeilen 12 bis 16 sind nicht mehr eingeschlossen, denn Kommentarzeichen kann man so nicht verschachteln. Der Kommentar endet immer beim ersten Vorkommen des schließenden Zeichens.

    Das /* in Zeile 6 beginnt also keinen neuen Kommentar, sondern ist einfach nur eine beliebige Zeichenfolge innerhalb des Kommentars von Zeile 1 bis 11.

    In einer Kontrollstruktur könnte man Zeile für Zeile durchlaufen, und den Zustand in einer Hilfsvariablen z.B. ein boolean $isNowComment merken, der zunächst false ist, und beim beginnenden Kommentarzeichen auf true gesetzt wird.
    Entsprechend beim schließenden wieder auf false.
    Mehrfach vorkommende Beginn-Folgen tun nucht weh, denn truer als true wird es ja nicht.
    Beim Zusammenbau der Ausgabe wird einfach jedes Mal gefragt, ob wir uns jetzt in einem Kommentarblock befinden oder nicht.
    if ($isNowComment)
    ​​​​​​
    ​​​​Natürlich könnte man alles auch in einen regulären Ausdruck packen, aber so viel "Eleganz" ist hier gar nicht nötig.



    Ohne den gesamten code ist es ja sowieso immer schwer, eine exakt passende Antwort zu geben.

    Kommentar

    Lädt...
    X