RegExps - Brauche Profi

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

  • RegExps - Brauche Profi

    Also ich brauche minimum einen Absoluten Profi mit Regular Expressions in PHP. Es dreht sich darum, dass ich ein Includer Script entwickelt habe (Aber net nur ein kleines billig Script mit ner Variable, es dreht sich auch ums Abfangen von Fehlerseiten, Parsen von URLs usw. Speziell dieses Parsen hats in sich, und da brauche ich nen ziemlichen Profi für, da ich mich leider in RegExps fast garnicht auskenne und es irgendwie auch nicht so ganz verstehe *g*

    Falls jemand ein gutes Tutorial kennt in dem alles, wirklich alles über Regular Expressions drin steht, bitte her damit.

  • #2
    Ganz nett ist doch das Tutorial hier auf php-resource.de:
    http://www.php-resource.de/tutorials/read/10/1/

    Das absolut Beste, was es zu RegEx zu lesen gibt ist die "RegEx-Bibel" von O'Reilly:
    http://www.oreilly.com/catalog/regex2/

    Aber warum Beschreibst Du Dein Problem nicht hier im Forum etwas genauer. Gemeinsam können wir bestimmt helfen.

    Oliver.

    Kommentar


    • #3
      Also es geht im Prinzip darum, dass beim Includen von Remote Sites ja prinzipiell URLs immernoch auf http://www.meineseite.de/seite.htm linken. Nun Soll die RegExp die URLs erstmal auf ihre Gültigkeit überprüfen und alle gültigen URLs Parsen, und zwar so, dass diese dann z.B. myfile.php?site=seite&ext=htm&mirror=1 heißen (Es gibt eine Mirrorlist, die von vornherein vordefineirte Werte, also Konstanten, enthält). Es soll nun also noch überprüft werden, ob dieser Server (http://meinserver.de UND http://www.meinserver.de !) in der Mirrorlist enthalten ist. Ansonsten statt dem mirror=(numericvalue) die URL (als Non-Numeric Value).

      Aus Sicherheitsgründen kann man per Einstellung das Non-Numeric Value Ignorieren und einfach nicht ausführen, lasse ich jetzt hier aber mal aussen vor.

      cya!

      Kommentar


      • #4
        Sorry. Ich habe noch nicht ganz verstanden, was dieses "Includer Script" wo und wie einbinden und verändern soll. Wo wird der zu verändernde HTML-Code ausgegeben, was ist ein Mirror und wo läuft das Script überhaupt (auf meinserver.de oder auf einem Mirror)? Wie sieht der Ursprungs-Code aus und wie soll das aussehen, was die RegEx für Dich machen soll?

        Oliver.

        Kommentar


        • #5
          Der zu verändernde HTML Code wird im Script ausgegeben, da wo er auch eingelesen wird.
          Mirrors im Sinne von Alternativ-Servern.
          Das Script läuft auf meinserver.de
          Der Ursprungscode variiert völlig. Das ist ja das Problem, und die RegExp soll alle gültigen URLs zerlegen und zu neuen URLs zusammenbasteln, eben so, dass http://server/meinedatei.php zu
          mirror = http://server
          site = meinedatei
          ext = php (ext; extension)

          Dann soll daraus ne neue URL zusammengebastelt werden, nämlich
          http://meinserver.de/includer.php?mi...edatei&ext=php

          Hoffe, du hast das so ungefähr verstanden.

          Kommentar


          • #6
            PHP-Code:
            $string 'http://server/meinedatei.php';

            $teile parse_url($string);
            $mirror urlencode("$teile[scheme]://$teile[host]");
            $path $teile['path'];
            if ((
            $p strrpos($path'.'))===false)
              
            $p=strlen($path+1);
            $ext substr($path$p+1);
            $site substr($path1$p-1);

            $url 'http://meinserver.de/includer.php?'
              
            "mirror=$mirror&site=$site&ext=$ext"
            alternativ:
            PHP-Code:
            $string 'http://server/meinedatei.php';

            if(
            preg_match('%^(.*?)://(.*?)/([^/]*/)*(.*)\.([a-z0-9]*)$%i',
                
            $string, list($dummy$scheme$mirror$path$site$ext))
              
            $url 'http://meinserver.de/includer.php?'
                
            "mirror=$mirror&site=$site&ext=$ext";
            else
              
            $url 'http://meinserver.de/invalid.php'
            mein Sport: mein Frühstück: meine Arbeit:

            Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

            Kommentar


            • #7
              Danke, also im Prinzip wars das auch schon was ich wollte, nur die RegExp zum Überprüfen hätte ich auch schon. Das hilft mir noch nicht so ganz weiter, mir fehlt da nämlich noch ne Funktion womit ich aus der Datei eben alle gültigen URLs Rausbekomme.
              Das Problem ist eben nur, woran erkenne ich, dass die URL Zuende ist? Wenn ein Leerzeichen verwendet wird, hab ich auf gut Deutsch gesagt die Arschkarte gezogen, dann wird das nämlich nicht korrekt geparst, oder?

              Kommentar


              • #8
                nuja ... wenn die URL nicht zu dem Ausdruck passt, liefert preg_match false zurück.

                Der von mir verwendete Ausdruck verkraftet Leerzeichen nur in der Endung nicht. Leerzeichen am Anfang und Ende eines Strings kann man aber wunderbar mit $string = trim($string); entfernen.
                mein Sport: mein Frühstück: meine Arbeit:

                Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                Kommentar


                • #9
                  Danke erstmal
                  Könnte man nicht auch per Preg_Replace alle URLs einfach nach diesem Schema parsen, und die die ungültig sind schlichtweg Ignorieren und nicht verarbeiten?
                  (Preg_Match liefert ja ein Array zurück, tut das Preg_Replace auch? Wenn ja, wäre es ja sehr simpel)

                  Kommentar


                  • #10
                    ereg_replace ersetzt nur. und wenn die Links mitten im Text stehen, muss der Ausdruck ein wenig verändert werden. Aber im Prinzip ist nix unmöglich:
                    PHP-Code:
                    $string 'schubidu
                    http://server/meinedatei.php den link ersetzen,
                    aber nicht diesen Text
                    ftp://ftpserver/anderedatei.wav das auch nicht
                    und://das/aberdoch.jawoll!
                    ohne://punkt/gehtnix!'
                    ;

                    $newstring preg_replace(
                      
                    '%([a-z]*)://(.*?)/([a-z0-9.]*)\.([a-z0-9]*)%i',
                      
                    '$1://meinserver.de/includer.php?mirror=$2&site=$3&ext=$4',
                      
                    $string
                    );

                    echo 
                    $newstring
                    mein Sport: mein Frühstück: meine Arbeit:

                    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                    Kommentar

                    Lädt...
                    X