Silvan Gehrig: Regular Expression

Hallo,

Benötige einen Regexp, der mir alle /* */ Kommentare aus dem Script-File entfernt. Leider kam ich bisher auf keine Lösung.

Mein Ansatz: /\(?!(\/)*)\*/
Funzt (logisch) ned :-(

Gruss Silvan

  1. Hi,

    Benötige einen Regexp, der mir alle /* */ Kommentare aus dem Script-File entfernt. Leider kam ich bisher auf keine Lösung.

    s!/\(.+?)\/!!gs

    Mein Ansatz: /\(?!(\/)*)\*/

    Die Negativsuche brauchst Du da nicht - es gibt andere Wege, "alles bis zum nächsten x" zu sagen, als "alle nicht-x bis zum nächsten x" :-)

    Funzt (logisch) ned :-(

    Zu dieser Aussage gehört immer 1.) eine Übersetzung ins Deutsche und 2.) eine Fehlerbeschreibung.

    Cheatah

    1. Hoi,

      Benötige einen Regexp, der mir alle /* */ Kommentare aus dem Script-File
      entfernt. Leider kam ich bisher auf keine Lösung.

      s!/\(.+?)\/!!gs

      printf("/*\n"); /* confusing the regex */

      Mein Ansatz: /\(?!(\/)*)\*/

      Die Negativsuche brauchst Du da nicht - es gibt andere Wege, "alles bis zum
      nächsten x" zu sagen, als "alle nicht-x bis zum nächsten x" :-)

      Ich glaube nicht, dass man da mit einem RegEx auskommt.

      Gruesse aus LH,
       c.j.k

      1. Hi,

        printf("/*\n"); /* confusing the regex */

        ja. Die Grenze einer jeden RegExp.

        Ich glaube nicht, dass man da mit einem RegEx auskommt.

        Wenn man sicherstellen kann, dass der Code sowas nicht enthält, reicht das. Die Wahrscheinlichkeit dafür ist höher, als man es z.B. bei dem Versuch hat, Links aus HTML-Code zu extrahieren.

        Cheatah

        1. Hoi,

          printf("/*\n"); /* confusing the regex */

          ja. Die Grenze einer jeden RegExp.

          Richtig.

          Ich glaube nicht, dass man da mit einem RegEx auskommt.

          Wenn man sicherstellen kann, dass der Code sowas nicht enthält, reicht das.

          Das wuerde ich mich nie wagen, sicherstellen zu wollen.

          Die Wahrscheinlichkeit dafür ist höher, als man es z.B. bei dem Versuch hat,
          Links aus HTML-Code zu extrahieren.

          Wie meinst du das?

          Gruesse aus LH,
           c.j.k

          1. Hi,

            Wenn man sicherstellen kann, dass der Code sowas nicht enthält, reicht das.
            Das wuerde ich mich nie wagen, sicherstellen zu wollen.

            nun, je nach Projekt und persönlicher Kenntnis des Codes, ist das eventuell möglich.

            Die Wahrscheinlichkeit dafür ist höher, als man es z.B. bei dem Versuch hat,
            Links aus HTML-Code zu extrahieren.
            Wie meinst du das?

            Es gibt oft die Frage, mit welcher RegExp man irgendwas aus HTML-Code herausholt; oft mit einem "außer wenn es zwischen <x> und </x> steht" oder "außer wenn es Attributwert ist" verbunden. Das ist vom Typus her der gleiche Fall wie der, den Du angeführt hast.

            Cheatah

            1. Hoi,

              Wenn man sicherstellen kann, dass der Code sowas nicht enthält, reicht
              das.
              Das wuerde ich mich nie wagen, sicherstellen zu wollen.

              nun, je nach Projekt und persönlicher Kenntnis des Codes, ist das eventuell
              möglich.

              Sehe ich anders, aber gut ;-) Jeder nach seinem Geschmack.

              Die Wahrscheinlichkeit dafür ist höher, als man es z.B. bei dem Versuch
              hat,Links aus HTML-Code zu extrahieren.
              Wie meinst du das?

              Es gibt oft die Frage, mit welcher RegExp man irgendwas aus HTML-Code
              herausholt; oft mit einem "außer wenn es zwischen <x> und </x> steht" oder
              "außer wenn es Attributwert ist" verbunden. Das ist vom Typus her der gleiche
              Fall wie der, den Du angeführt hast.

              Ach so, ja, in der Tat. HTML-Code mit nur einem RegEx parsen zu wollen, halte
              ich fuer ein sinnloses Unterfangen.

              Gruesse aus LH,
               c.j.k

              1. Hallo,

                im Perl Kochbuch findet sich zum Thema C-Kommentare entfernen die Anregung:

                s{
                /\*
                .*?
                \*/
                }[]gsx

                Steht aber schon "unvollständig" dahinter .....
                ;-)

                Viele Grüße
                Mathias

                1. Moin,

                  im Perl Kochbuch findet sich zum Thema C-Kommentare entfernen die
                  Anregung:

                  s{
                  /\*
                  .*?
                  \*/
                  }[]gsx

                  Das ist doch genau dasselbe, was Cheatah geschrieben hat ;-) Der obige
                  RegEx ist nur eine andere Schreibweise.

                  Gruesse aus MS,
                   c.j.k

                  1. Hi,

                    Das ist doch genau dasselbe, was Cheatah geschrieben hat ;-)

                    stimmt ;-) Ich habe lediglich zusätzliche runde Klammern gesetzt - ich gehe gerne auf Nummer Sicher, was den "Scope" eines Operators wie "?" betrifft.

                    Der obige RegEx ist nur eine andere Schreibweise.

                    Ja. Die Verteilung auf mehrere Zeilen wird durch das "x" am Ende ermöglicht. Ich muss aber gestehen, dass ich noch nie gesehen habe, dass _unterschiedliche_ Klammertypen für den RegExp- und den Ersetzungspart verwendet werden.

                    So viel zum Thema "man lernt nie aus" :-)

                    Cheatah

                    1. Hoi,

                      Das ist doch genau dasselbe, was Cheatah geschrieben hat ;-)

                      stimmt ;-) Ich habe lediglich zusätzliche runde Klammern gesetzt - ich gehe
                      gerne auf Nummer Sicher, was den "Scope" eines Operators wie "?" betrifft.

                      Och, das ist recht einfach: das ? bezieht sich immer auf das vorhergehende
                      Zeichen. Bei einer Klammer, auf die zurueckliegende Klammer.

                      Der obige RegEx ist nur eine andere Schreibweise.

                      Ja. Die Verteilung auf mehrere Zeilen wird durch das "x" am Ende ermöglicht.
                      Ich muss aber gestehen, dass ich noch nie gesehen habe, dass
                      _unterschiedliche_ Klammertypen für den RegExp- und den Ersetzungspart
                      verwendet werden.

                      Doch, das geht -- allerdings nur bei Klammern :-)

                      So viel zum Thema "man lernt nie aus" :-)

                      Jap.

                      Gruesse aus LH,
                       c.j.k

    2. Hi Cheatah,

      Hat mir wirklich geholfen.....was aber besagt die Zeichenkette "(.+?)" genau?

      Merci für deinen Tip :)

      Gruss Silvan

      Hi,

      Benötige einen Regexp, der mir alle /* */ Kommentare aus dem Script-File entfernt. Leider kam ich bisher auf keine Lösung.

      s!/\(.+?)\/!!gs

      Mein Ansatz: /\(?!(\/)*)\*/

      Die Negativsuche brauchst Du da nicht - es gibt andere Wege, "alles bis zum nächsten x" zu sagen, als "alle nicht-x bis zum nächsten x" :-)

      Funzt (logisch) ned :-(

      Zu dieser Aussage gehört immer 1.) eine Übersetzung ins Deutsche und 2.) eine Fehlerbeschreibung.

      Cheatah

      1. Hoi,

        ich glaube, die Lektuere von http://learn.to/quote wuerde dir
        gut tun.

        Hat mir wirklich geholfen.....was aber besagt die Zeichenkette
        "(.+?)" genau?

        .+ bedeutet, ein oder beliebig viele beliebige Zeichen. Das '?'
        dahinter macht den Modifier '+' ungreedy. Das bedeutet in diesem
        Zusammenhang, er matcht nur bis zum naechsten */.

        Gruesse aus MS,
         c.j.k

        1. Hi,

          ich glaube, die Lektuere von http://learn.to/quote wuerde
          dir gut tun.

          Das klingt irgendwie vorwursvoll. Habe ich mich nicht korrekt verhalten oder ist was nicht in Ordnung?

          .+ bedeutet, ein oder beliebig viele beliebige Zeichen. Das '?'
          dahinter macht den Modifier '+' ungreedy.

          Ich habe schon viel mit RegExp gemacht, allerdings habe ich von einem ? als ungreedy Operator noch nie was gehört.....
          aber man lernt ja nie aus :)

          Gruss Silvan

          1. Hoi,

            ich glaube, die Lektuere von http://learn.to/quote
            wuerde dir gut tun.
            Das klingt irgendwie vorwursvoll.

            Noe, das war ein gut gemeinter Hinweis.

            Habe ich mich nicht korrekt verhalten oder ist was nicht in
            Ordnung?

            Du hast einen TOFU geschrieben: Text Oben, Fullquote Unten. Nicht
            gerade toll, sowas ;-)

            .+ bedeutet, ein oder beliebig viele beliebige Zeichen. Das '?'
            dahinter macht den Modifier '+' ungreedy.
            Ich habe schon viel mit RegExp gemacht, allerdings habe ich von
            einem ? als ungreedy Operator noch nie was gehört.....

            Das Fragezeichen macht einen greedy Quantifier ungreedy, wenn es
            direkt dahinter steht. Ansonsten bedeutet es nur 'einmal oder
            keinmal'.

            aber man lernt ja nie aus :)

            In der Tat.

            Gruesse aus MS,
             c.j.k

          2. Hi,

            Das klingt irgendwie vorwursvoll. Habe ich mich nicht korrekt verhalten oder ist was nicht in Ordnung?

            einige von uns - mich eingeschlossen - klingen nicht selten vorwurfsvoll, obwohl wir es gewöhnlich nicht so meinen. So auch das folgende:

            Ich habe schon viel mit RegExp gemacht, allerdings habe ich von einem ? als ungreedy Operator noch nie was gehört.....

            Du möchtest

            perldoc perlre

            lesen.

            aber man lernt ja nie aus :)

            Wie wahr das ist merkt man daran, wie oft man in die Doku guckt ;-)

            Cheatah