Ankündigung

Einklappen
Keine Ankündigung bisher.

Suche nach einem regulären Ausdruck ...

Einklappen

Neue Werbung 2019

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

  • Suche nach einem regulären Ausdruck ...

    Hallo,

    auf der Suche nach einem regulären Ausdruck, der einen einzeiligen u. mehrzeiligen Kommentar im Code entfernen kann, ohne Links (http://...) auch mit zu entfernen, bin ich nicht fündig geworden.

    Kennt jemand einen regulären Ausdruck dafür bzw. einen guten Generator für regulären Ausdrücke, der so was erzeugt?


  • #2
    Was meinst du mir "ohne Links"? Das wird du mit purem RegExp nicht hinbekommen, da du ja auch sowas wie
    PHP-Code:
    echo "/* finde mich */"
    im Code haben könntest. Du bist vielleicht besser damit beraten:
    http://php.net/manual/de/book.tokenizer.php
    Standards - Best Practices - AwesomePHP - Guideline für WebApps

    Kommentar


    • #3
      Weiß ich (danke für das Bsp. mit Token) ... ich dachte nur, dass ein schlauer Regx das irgendwie "erkennen" könnte, dass es sich bei so was um keinen Kommentar handelt ... sollte doch machbar sein oder?

      Kommentar


      • #4
        der einen einzeiligen u. mehrzeiligen Kommentar im Code entfernen kann, ohne Links (http://...) auch mit zu entfernen
        Dann stehen am Ende die URLs im Code und du hast Syntaxfehler? Was genau soll das bringen?

        Kommentar


        • #5
          Zitat von mermshaus Beitrag anzeigen
          Dann stehen am Ende die URLs im Code und du hast Syntaxfehler? Was genau soll das bringen?
          Viele Regex klappern nach dem // Zeichen ab, was für sie bdeutet, dass ein zeiliger Kommentar dort anfängt. Leider aber ist für sie auch so was ein Kommentar:

          PHP-Code:
          <a href="http://www...."
          dann bleibt nur noch das hier zurück:

          PHP-Code:
          <a href="http: 
          Ein gutes Regex sollte merken, dass das kein Kommentar ist.

          Kommentar


          • #6
            Nur mal so ne Frage, aber wozu brauchst du das? Sei doch froh um jeden Kommentar, der im Code steht.

            Falls du Kommentare richtig entfernen möchtest, musst du den Code parsen und dabei eben auch alle Syntaxregeln einhalten. Ein RegEx wird da immer Probleme haben.
            mysql ist veraltet Mails senden: Ohne Probleme und ohne mail()
            PHP-Code:
            echo 'PS: <b>Meine Antwort ist keine Lösung, sondern nur eine Hilfe zur Lösung.</b>'

            Kommentar


            • #7
              Nein, mit regulären Ausdrücken kannst du keine rekursiven Strukturen erkennen. Dadurch kannst du auch nicht zweifelsfrei erkennen, in welchem Kontext der mutmaßlich erkannte Kommentarblock steht. Ich könnte dir das in aller Detailtiefe erklären, aber am Ende steht, dass das nur mit einem richtigen, kontextsensitiven Parser geht. PHP bringt eonen Tokenizer für sich selbst bereits mit. So what?
              Standards - Best Practices - AwesomePHP - Guideline für WebApps

              Kommentar


              • #8
                Zitat von Fuerst Rainer Beitrag anzeigen
                ...

                PHP-Code:
                <a href="http://www...."
                dann bleibt nur noch das hier zurück:

                PHP-Code:
                <a href="http: 
                Ein gutes Regex sollte merken, dass das kein Kommentar ist.
                So als Frage in den Raum gestellt, warum schließt Du in Deinem Ausdruck nicht einfach aus, dass "http:" vor dem gesuchten Element steht? Etwas gewagt würde fast der Doppelpunkt ausreichen?

                Kommentar


                • #9
                  im Code
                  „im Code“, aha.
                  --

                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                  --

                  Kommentar


                  • #10
                    Zitat von Fuerst Rainer Beitrag anzeigen
                    ...
                    Ein gutes Regex sollte merken, dass das kein Kommentar ist.
                    Es gibt keine guten Regex. Sie alle gehören zur dunklen Seite der Macht

                    Aber im Ernst, versuchs doch mal mit diesem Ausdruck:

                    Code:
                    [^:](\/{2}.*?)\n
                    Bitte noch global und multiline setzen.
                    Das sollte in der Capture-Group 1 nur noch Kommentare, aber keine mit http: (eigentlich nur dem ":" ) eingeleiteten Links finden.

                    Wenn Du noch Fragen hast, frage.

                    Und ja, ja, ich weiß. Ich habe ihn jetzt nicht komplett durchgetestet. Aber jeder soll hier doch noch etwas zu tun haben

                    Kommentar


                    • #11
                      PHP-Code:
                      switch ($bla) {

                        case 
                      'foo':// do some foo
                          

                          
                      break;



                      PHP-Code:
                      define ('type_http' 'xyz');

                      switch (
                      $bla) {
                        case 
                      type_http:// do some foo
                          

                          
                      break;

                      --

                      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                      --

                      Kommentar


                      • #12
                        Zitat von nikosch Beitrag anzeigen
                        ...
                        PHP-Code:
                        define ('type_http' 'xyz');

                        switch (
                        $bla) {
                          case 
                        type_http:// do some foo
                            

                            
                        break;

                        Und natürlich muss der Forengott meine einfache Lösung wieder hinwegfegen

                        Wobei der zweite Fall doch etwas sehr an Haaren herbeigezogen ist, aber es ist ja auch sowieso noch genug Luft in dem Ausdruck um hier noch nachzubessern.
                        Wie gesagt, soll hier ja keiner ohne Arbeit bleiben

                        Kommentar


                        • #13
                          Zitat von Neither Beitrag anzeigen
                          Wobei der zweite Fall doch etwas sehr an Haaren herbeigezogen ist, aber es ist ja auch sowieso noch genug Luft in dem Ausdruck um hier noch nachzubessern.
                          Man kann es an den Haaren herbeigezogen nenn oder auch einfach beim richtigen Namen: Bug. Mit einem Regulärenausdruck erkennen zu wollen ob sich // in einer Zeichenkette oder im "Code" befindet dürfte relativ schwer werden.
                          Ich denke das http://php.net/manual/de/tokenizer.examples.php spart eine ganze Menge frust.

                          Kommentar


                          • #14
                            Seh ich auch so.
                            Wobei der zweite Fall doch etwas sehr an Haaren herbeigezogen ist,
                            Die Frage ist doch immer, wie ideal willst Du den Code vorbereiten und wie sehr darf der Ausdruck im Zweifel alles kaputtmachen. Das Beispiel auszudenken hat mich keine 5 Minuten gekostet.
                            --

                            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                            Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                            --

                            Kommentar


                            • #15
                              Zitat von Fuerst Rainer Beitrag anzeigen
                              Weiß ich (danke für das Bsp. mit Token) ... ich dachte nur ...
                              Ist ja auch so furchbar kompliziert gegenüber einem Regex

                              PHP-Code:
                              $codeNew '';
                              foreach(
                              token_get_all($code) as $token){
                                  if( 
                              is_string($token) ) $codeNew .= $token;
                                  elseif( 
                              $token[0] !== T_COMMENT $codeNew .= $token[1];;

                              PHP-Klassen auf github

                              Kommentar

                              Lädt...
                              X