Andreas Korthaus: Request-String parsen

Hallo

Nur zur Kontrolle, ist folgende RegEx korrekt, um aus einem Request-String alle Parameter mit dem Namen "Auswahl" zu extrahieren?

/Auswahl=(.*?)[^\w%.+_-]/

Funktioniert zwar, was aber nicht heißen muß das es immer funktioniert.

Grüße
Andreas

  1. Hallo Andreas,

    Nur zur Kontrolle, ist folgende RegEx korrekt, um aus einem
    Request-String alle Parameter mit dem Namen "Auswahl" zu
    extrahieren?

    /Auswahl=(.*?)[^\w%.+_-]/

    Nee, das ist Unfug. Sinnvoller waere

    /Auswahl=([^&]*)/

    Der Feld-Trenner ist das &, du sagst also: matche auf
    'Auswahl=', gefolgt von allem ausser &, und das 0-n mal.

    Funktioniert zwar, was aber nicht heißen muß das es immer
    funktioniert.

    Dass es funktioniert, wundert mich jetzt.

    Gruesse,
     CK

    1. Hi Christian!

      /Auswahl=(.*?)[^\w%.+_-]/

      Nee, das ist Unfug.

      Warum? "finde alle Zeichen bis zum nächsten Zeichen außer Buchstaben, Zahlen, %, ., +, _ und -". Andere Zeichen kommen IMHO nicht vor, also warum ist das Unfug?

      Sinnvoller waere
      /Auswahl=([^&]*)/

      Dann fehlt aber das letze Element!

      Dass es funktioniert, wundert mich jetzt.

      Funktioniert IMHO sogar besser als Deine Version ;-)

      Viele Grüße
      Andreas

      1. Hallo Andreas,

        /Auswahl=(.*?)[^\w%.+_-]/

        Nee, das ist Unfug.
        Warum? "finde alle Zeichen bis zum nächsten Zeichen außer
        Buchstaben, Zahlen, %, ., +, _ und -". Andere Zeichen
        kommen IMHO nicht vor, also warum ist das Unfug?

        Weil es verdammt langsam und umstaendlich ist. Du zwingst so
        jede RegEx-Maschine in die Knie.

        Sinnvoller waere
        /Auswahl=([^&]*)/

        Dann fehlt aber das letze Element!

        Nein:

        ckruse@sunshine:~/tmp/stats $ cat test.pl
        #!/usr/bin/perl -w

        use strict;

        my $qs = 'Auswahl=hallo&Auswahl=blahr&Auswahl=blub';
        my @matches = $qs =~ /Auswahl=([^&]+)/g;

        print join(', ',@matches),"\n";

        ckruse@sunshine:~/tmp/stats $ perl test.pl
        hallo, blahr, blub
        ckruse@sunshine:~/tmp/stats $

        Es wird ja nicht *erzwungen*, dass ein & folgt, sondern es
        wird nur gesagt 'gib mir alles bis auf &' -- es muss gar kein
        & vorkommen.

        Dass es funktioniert, wundert mich jetzt.
        Funktioniert IMHO sogar besser als Deine Version ;-)

        Nee, nicht wirklich.

        Gruesse,
         CK

        1. Hallo!

          Weil es verdammt langsam und umstaendlich ist. Du zwingst so
          jede RegEx-Maschine in die Knie.

          Na wenn ich was kann dann das ;-) Vermutlich wenigstens das besser als Du!

          Es wird ja nicht *erzwungen*, dass ein & folgt, sondern es
          wird nur gesagt 'gib mir alles bis auf &' -- es muss gar kein
          & vorkommen.

          Mist!

          Ja, hast ja Recht, wäre auch zu schön gewesen... immer auf die Kleinen, Unwissenden... :-(

          *g* Vielen Dank, aber vor allem für den JavaSript-Tipp unten!

          Grüße
          Andreas