Bernd: Mit Programm Kommentar entfernen

Hallo,
ich suche ein Programm, dass mir aus php und xhtml Dateien die Kommentare entfernt. Kennt jemand ein solches Programm.

mfg Bernd

  1. Hi!

    ich suche ein Programm, dass mir aus php und xhtml Dateien die Kommentare entfernt. Kennt jemand ein solches Programm.

    Dazu öffne ich eine Shell und mache das mit einer Zeile Perl und einem regulären Ausdruck.
    Hast du irgendeine Scriptsprache auf deinem Rechner installiert? Perl, Python, PHP, ...?

    Gruß, rob

    1. Hi rob,
      ich habe php auf meinem rechner laufen. Wie würde denn der Reguläre Ausdruck aussehen?

      mfg Bernd

      1. Hallo (name),

        ich habe php auf meinem rechner laufen. Wie würde denn der Reguläre Ausdruck aussehen?

        für (X)HTML: /<?--.*?(-->)/
        für PHP:
          1.: /#.*?\n/
          2.: //\.*?(\/)/

        Wenn ich einen Fehler gemacht habe möge man mir diesen verzeihen ;-)

        Gruß
        Alexander Brock

        --
        SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:? ss:| de:> js:( ch:| sh:( mo:} zu:}
        http://againsttcpa.com
      2. Moin!

        ich habe php auf meinem rechner laufen.

        Das ist doch schon mal was. Du weißt, daß du PHP auch auf der Kommandozeile aufrufen kannst?
        php -f dein_script.php (auf Windows; auf Unix einfach Hashbang-Zeile schreiben und chmod +x datei)
        Dann brauchst Du das nicht über deinen Webserver laufen lassen.

        Ja, und dann mit fopen() eine Datei öffnen und den Inhalt in einen String lesen, RegEx drüber jagen und in Datei schreiben.

        Wie würde denn der Reguläre Ausdruck aussehen?

        hmm... So vielleicht:
        $neu = preg_replace( '/(<!--)(.*)(-->)/', "", $suchtext );

        Gruß, rob

        1. Hi,
          ich hatte auf eine einfache Lösung gehofft, aber das scheint mir etwas kompliziert. Ich glaube ich mach das doch lieber von Hand.

          Trotzdem Danke für die Hilfe und schöne Weihnachten.

          mfg Bernd

          1. Huhu Bernd

            ich hatte auf eine einfache Lösung gehofft, aber das scheint mir etwas kompliziert. Ich glaube ich mach das doch lieber von Hand.

            Es ist tatsächlich nicht so einfach.

            Der reguläre Ausdruck zum Entfernen von Kommentaren sieht ungefähr so aus

            #([^"'/#<]+|'[^'\]*(?:.[^'\]*)*'[^"'/#<]*|"[^"\]*(?:.[^"\]*)*"[^"'/#<]*|<<<\s?(\S+)\b.*^\2[^"'/#<]*)|/\[^*]*\+(?:[^/*][^*]*\*+)*/|//[^\n]*|#[^\n]*#ms

            Den habe ich hier nur gepostet um die Komplexität der Aufgabe zu verdeutlichen, so einen Klopps nachzuvollziehen ist ja eine Strafe ;-)

            Du kannst im einfachsten Fall den Tokenizer von PHP benutzen, ein Beispiel
            dazu gibt es da

            http://manuals.phpforum.de/php/ref.tokenizer.php

            Eine Funktion die den oben genannten Regulären Ausdruck benutzt findest Du
            z.B. dort

            http://simplecontent.net/snippets/view/project/PHP_Snippets/03_Beispiele/01_text/strip_comments_1.html

            Viele Grüße

            lulu

            --
            bythewaythewebsuxgoofflineandenjoytheday
            1. Hallo lulu,

              Der reguläre Ausdruck zum Entfernen von Kommentaren sieht ungefähr so aus
              #([^"'/#<]+|'[^'\]*(?:.[^'\]*)*'[^"'/#<]*|"[^"\]*(?:.[^"\]*)*"[^"'/#<]*|<<<\s?(\S+)\b.*^\2[^"'/#<]*)|/\[^*]*\+(?:[^/*][^*]*\*+)*/|//[^\n]*|#[^\n]*#ms

              Was für Kommentare soll dieser Ausdruck denn alles entfernen?
              Ich kenne bis jetzt nur 4 Arten:

              //
              /**/
              <!-- -->

              Da fällt mir auf, ich hab Fehler gemacht :-(
              Meine Regulären Ausdrücke müssten so heißen:

              /(#|//).*?\n/
              //\.*?(\/)/
              /<!--.*?(-->)/

              Gruß
              Alexander Brock

              --
              SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:? ss:| de:> js:( ch:| sh:( mo:} zu:}
              http://againsttcpa.com
              1. Huhu Alexander

                #([^"'/#<]+|'[^'\]*(?:.[^'\]*)*'[^"'/#<]*|"[^"\]*(?:.[^"\]*)*"[^"'/#<]*|<<<\s?(\S+)\b.*^\2[^"'/#<]*)|/\[^*]*\+(?:[^/*][^*]*\*+)*/|//[^\n]*|#[^\n]*#ms

                Was für Kommentare soll dieser Ausdruck denn alles entfernen?
                Ich kenne bis jetzt nur 4 Arten:

                //
                /**/
                <!-- -->

                Die ersten drei der genannten, was die Sache kompliziert und den Ausdruck
                so umfangreich macht ist die Notwendigkeit Kommentarzeichen innerhalb von Strings von der Entfernung auszunehmen.

                Das folgende sind z.B. Klippen die umschifft werden müssen

                <?php

                hier steht eine Farbangabe

                $rgb = '#cc0023';

                /* ein Kommentar */

                $a = 'Ein Kommentar sieht z.B. so aus: /* [...] */';

                ?>

                Viele Grüße

                lulu

                --
                bythewaythewebsuxgoofflineandenjoytheday
        2. Wie würde denn der Reguläre Ausdruck aussehen?
          hmm... So vielleicht:
          $neu = preg_replace( '/(<!--)(.*)(-->)/', "", $suchtext );

          Das sieht aber gierig aus! Sollte hinter dem .* kein Fragezeichen stehen?

          Gruß
          Reiner

          1. Hi Reiner,

            $neu = preg_replace( '/(<!--)(.*)(-->)/', "", $suchtext );

            Das sieht aber gierig aus! Sollte hinter dem .* kein Fragezeichen stehen?

            Warum das? Damit .* 0 oder einmal vorkommen kann? Was du machen willst ist vermutlich, dass auch leere Kommentare entfernt werden, oder?

            Du hast vermutlich übersehen, dass * ja 0 bis unendlich mal heißt und somit <!----> schon gematched würde.

            MfG, Dennis.

            --
            Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
            Zufällige Hinweise:
            ------------------------
            Bedeutung meines SelfCodes
            1. Hi,

              $neu = preg_replace( '/(<!--)(.*)(-->)/', "", $suchtext );

              Das sieht aber gierig aus! Sollte hinter dem .* kein Fragezeichen stehen?

              Warum das? Damit .* 0 oder einmal vorkommen kann? Was du machen willst ist vermutlich, dass auch leere Kommentare entfernt werden, oder?

              Nein,
              um bei

              bla<!-- comment -->blubb<!-- comment -->bla

              das blubb zu erhalten (wie bei Veronas Spinat).

              Mit
              /(<!--)(.*)(-->)/
              wird alles zwischen den zwei bla gefunden.
              Mit
              /(<!--)(.*?)(-->)/
              wird nur das zwischen bla und blubb bzw. das zwischen blubb und bla gefunden.

              cu,
              Andreas

              --
              Warum nennt sich Andreas hier MudGuard?
              Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
              1. Hi MudGuard,

                bla<!-- comment -->blubb<!-- comment -->bla

                Mit
                /(<!--)(.*)(-->)/
                wird alles zwischen den zwei bla gefunden.
                Mit
                /(<!--)(.*?)(-->)/
                wird nur das zwischen bla und blubb bzw. das zwischen blubb und bla gefunden.

                Also wäre ersteres ein "gefräßiger" RegEx und letzteres ein "ungreede" RegEx? Ließe sich selbiges nicht durch den Modifier U (in PHP) realisieren?

                MfG, Dennis.

                --
                Mein SelfCode: ie:{ fl:{ br:^ va:) ls:< fo:) rl:( n4:& ss:) de:> js:( ch:{ sh:( mo:} zu:|
                Zufällige Hinweise:
                ------------------------
                Wer die FAQ gelesen hat, ist klüger!
                ... und weiß wie man Links macht ;-)