Enrico: Regulärer Ausdruck ist fehlerhaft

Hallo,

ich möchte eine URL mit folgendem Aufbau über PHP prüfen:

http://www.unsereseite.de/ADMIN/PHP/Login.php?iWb5AplQxO1kODPKXYtrRhyLwcVZ680sznKmfqEedU2a7MvgGHBJ3o4SCT9IjFNucy

Der reguläre Ausdruck hat folgenden Aufbau:

  
if (preg_match("/^(http\:\/\/)?+(www\.)?+unsereseite\.de\/ADMIN\/PHP\/Login\.php\?[a-z0-9]{64}$/i", $a))  
{  
...  
}  

Und dieser Ausdruck validiert falsch und ich komme einfach nicht dahinter, warum.

  • ^-Zeichen: suche am Anfang des Strings beginnen
  • (http://)?+  "http://" muss nicht, kann aber höchstens einmal vorkommen
  • (www.)?+       "www."    muss nicht, kann aber höchstens einmal vorkommen
  • Der Rest bis zum Fragezeichen muss wie vorgegeben vorhanden sein
  • Nach dem Fragezeichen müssen 64 Zeichen folgen, die nur aus Groß- und Kleinbuchstaben sowie Ziffern bestehen dürfen
  • $-Zeichen kennzeichnet das Ende der Suche

Ich kann keine(n) Fehler entdecken.

Was habe ich falsch gemacht?

Vielen Dank für eure Hilfe und Gruß,
Enrico

  1. Hi,

    if (preg_match("/^(http://)?+(www.)?+unsereseite.de/ADMIN/PHP/Login.php?[a-z0-9]{64}$/i", $a))

      
    ?+ ???  
      
    cu,  
    Andreas
    
    -- 
    [Warum nennt sich Andreas hier MudGuard?](http://MudGuard.de/)  
    [O o ostern ...](http://ostereier.andreas-waechter.de/)  
      
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.  
    
    
    1. Hallo Andreas,

      ?+ ???

      Das habe ich dieser Seite entnommen (Rubrik "Gruppierung").

      Gruß,
      Enrico

      1. Aloha ;)

        Das habe ich dieser Seite entnommen (Rubrik "Gruppierung").

        Wozu denn "Kein- oder einmal und kein Backtracking" (?+), wenn du direkt "Einmal oder keinmal" (?) haben kannst? Zumal ich mir wirklich nicht sicher bin, ob deine Quelle überhaupt Recht hat, meine Quelle sieht für "+" keine weiteren Bedeutungen vor (während die zusätzlichen Bedeutungen von ? erwähnt werden, die Kombination +? ist demnach nach meiner Quelle definiert, nur das ?+ zumindest nach meiner Lesart nicht)... Kann mich aber auch täuschen.

        Grüße,

        RIDER

        --
        Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller
        ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
        1. Hallo RIDER,

          ich habe das "+" nach den Fragezeichen entfernt und es funktioniert weiterhin.

          Dann hatte ich wohl, nach der Korrektur der Zeichenanzahl, einfach nur Glück, sollte es die Kombination "?+" tatsächlich geben.

          Gruß,
          Enrico

          1. Hallo nochmal,

            ich habe das "+" nach den Fragezeichen entfernt und es funktioniert weiterhin.

            Wüsste jetzt auch nicht, was ein Possessive Quantifier hier für Sinn macht :)

            Gute Nacht, Robert

    2. Aloha ;)

      ?+ ???

      Schätze auch, dass da der Fehler (oder zumindest: ein Fehler) begraben liegt. "?+" wäre die Kombination aus "Entweder einmal oder gar nicht" und "Einmal oder mehrmals". Diese Kombination ist in dieser Form höchst unsinnvoll, setzt der "+"-Quantifier ja voraus, dass das vorhergehende mindestens einmal vorkommt. Da unsinnvoll, ist "?+" so für den RegExp-Parser eine uninterpretierbare Angabe...

      Grüße,

      RIDER

      --
      Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller
      ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
      1. Servus RIDER,

        Schätze auch, dass da der Fehler (oder zumindest: ein Fehler) begraben liegt

        D.h., die Seite hätte hier einen mindestens gegebenenfalls unglücklich verlaufenden Ausdruck veröffentlicht?

        Was wäre dann der beste Ausdruck für "keinmal oder einmal"?

        Hätte ich auf dem Zustand meiner Augenschwere die ihr gebührende Aufmerksamkeit geschenkt, als zu programmieren, dann hätte ich auch nicht überlesen, dass die Lösung nur ein paar Zeilen weiter oben gewesen wäre.

        Mission für heute erfüllt.

        Euch allen besten Dank für den flott erteilten Stoß in die richtige Richtung.

        Gute Nacht und Gruß,
        Enrico

  2. Tach!

    Und dieser Ausdruck validiert falsch und ich komme einfach nicht dahinter, warum.

    Ich seh jetzt auf die Schnelle auch nicht die Ursache. Aber probier es doch mal schrittweise. Erstmal die Teilausdrücke und dann immer mehr zusammengesetzt.

    Die alternative Frage wäre, ob das ein Regulärer Ausdruck sein muss oder ob du nicht auch die URL mit parse_url() zerlegen und die Einzelteile getrennt und prüfen kannst.

    dedlfix.

    1. Servus dedlfix,

      Aber probier es doch mal schrittweise

      ^(http://)?+(www.)?+ validiert korrekt. In einem Online-Tester findet er "www.", "http://" und auch "http://www.", das funktioniert. Die nachfolgenden Zeichenfolgen führen ins Leere ^^

      Gruß,
      Enrico

  3. Hallo Enrico,

    ...iWb5AplQxO1kODPKXYtrRhyLwcVZ680sznKmfqEedU2a7MvgGHBJ3o4SCT9IjFNucy

    falls das [a-z0-9]{64} entsprechen sollte: Das sind aber 66 Zeichen.

    lG, Robert

    1. Hallo Robert,

      Das sind aber 66 Zeichen

      Stimmt, dummer Denkfehler, flink korrigiert und schon klappt's :-)

      Besten Dank!!

      Gruß,
      Enrico