Feste URL parsen

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

  • Feste URL parsen

    Grüß Gott,

    ich möchte eine URL parsen, die fest definiert ist. Zum Beispiel "http://www.tagesschau.de/chat/". Die Adresse darf jedoch weitergehen und "http://www.tagesschau.de/chat/xy/" lauten. Wichtig ist nur, dass zumindest "http://www.tagesschau.de/chat/" vorkommt! Ist dies der Fall, möchte ich die gesamte URL auslesen bzw. in der $matches-Variable haben. Die Variable, in der gesucht wird ($value), ist x-beliebig groß - in ihr kann eine Menge stehen, es können auch mehrere URLs sein. Gelöst werden soll das mittels preg_match_all(). Ich komme leider trotz mehrstündigen Versuchen einfach nicht weiter ... Kurz: Es kommt kein Fehler, doch es wird, obwohl in $value vorhanden, kein Treffer angezeigt.

    Mein bisheriger Code:
    Code:
    preg_match_all('!(' . $url . '[^\s]*)!i', $value, $matches)
    Angenommen, in $url steht "http://www.spiegel.de/politik/". Das System dürfte jetzt nur Links parsen, die unterhalb von $url stehen. Also z. B. "http://www.spiegel.de/politik/deutschland/0,1518,499121,00.html". Nicht aber "http://www.spiegel.de/wirtschaft/0,1518,499220,00.html". Und um das ganze noch schwerer zu machen, wird dann die komplette, geparste URL ausgelesen. Das würde das o.g. Skript aber wohl schon machen, wenn man an das $matches vorne $url dran hängt.
    Zuletzt geändert von frederic; 10.08.2007, 13:24.

  • #2
    Ich halte es für ausgeschlossen, dass du dich nach 4,5 Jahren (damals hast du deinen ersten und bisher letzten Beitrag geschrieben) noch an dein Passwort erinnerst. Daraus folgt, dass du hier regelmäßig mitliest.
    Da sollte dir doch schon mal aufgefallen sein, dass wir hier stets auf unsere Regeln pochen. In deinem Fall heißt das error_reporting(E_ALL) und Testausgabe des Pattern.

    Dann siehst du schon, dass die URL genau so im Pattern steht, wie sie in $url enthalten ist. Das hat aber Nebenwirkungen. Denn der Punkt (wie in spiegel-Punkt-de) hat in regulären Ausdrücken eine Bedeutung.
    Du mußt $url also umschreiben bevor du es ins Pattern einbaust. Bei der Gelegenheit kannst du auch gleich berücksichtigen, dass das www. meist optional ist.

    Zum Testen eignet sich übrigens http://regexp-evaluator.de/evaluator/ ganz hervorangend.

    Kommentar


    • #3
      Original geschrieben von onemorenerd
      [B]Ich halte es für ausgeschlossen, dass du dich nach 4,5 Jahren (damals hast du deinen ersten und bisher letzten Beitrag geschrieben) noch an dein Passwort erinnerst. Daraus folgt, dass du hier regelmäßig mitliest.
      Ähm...?
      Da sollte dir doch schon mal aufgefallen sein, dass wir hier stets auf unsere Regeln pochen. In deinem Fall heißt das error_reporting(E_ALL) und Testausgabe des Pattern.
      Zum einen kenne ich die Regeln, zum anderen habe ich sowohl error_reporting(E_ALL) ausgegeben als auch das Pattern. Ohne entsprechende Aussage für mein Problem, wie ich im ersten Beitrag schrieb.
      Dann siehst du schon, dass die URL genau so im Pattern steht, wie sie in $url enthalten ist. Das hat aber Nebenwirkungen. Denn der Punkt (wie in spiegel-Punkt-de) hat in regulären Ausdrücken eine Bedeutung.
      Ergo muss die URL entsprechend vorher geparst werden, um alle möglichen regulären Ausdrücke in der URL (wie ein Punkt) irgendwie "auzuschalten" - beispielsweise mit Backslashes?

      Kommentar


      • #4
        Ja.

        Kommentar


        • #5
          Genau und "-" mußt du auch maskieren.

          Kommentar


          • #6
            Danke. Problem aber noch nicht gelöst - was beachte ich nicht?
            Auf Grundlage des o.g. Codes und des Parsens von Punkt und Strich, sieht der RegExp folgendermaßen aus:
            Code:
            !([url]http://www\.spiegel\.de[/url][^\s]*)!i
            Der neue PHP-Code:
            PHP-Code:
            <?php preg_match_all('!(' getURLParse($url) . '[^\s]*)!i'$value$matches); ?>
            E_ALL ist, wie schon zuvor, ergebnislos.
            EDIT:
            unbruch sponsored by tobiaz
            Zuletzt geändert von TobiaZ; 10.08.2007, 14:25.

            Kommentar


            • #7
              :// musst du natürlich auch escapen!!!

              Kommentar


              • #8
                Bitte brich deinen Code um.

                Das Matchen funktioniert wie man sieht.
                Dort kannst du auch sehen, was in $matches steht.

                @Tobiaz: Warum? Doppelpunkt und Slash haben nur eine Funktion in reg. Ausdrücken, wenn sie als Delimiter benutzt werden.

                Kommentar


                • #9
                  Ups. Nach dem Format?
                  Code:
                  . = \.
                  : = \:
                  - = \-
                  / = \/
                  Also (geparst):
                  Code:
                  !(http\:\/\/www\.spiegel\.de[^\s]*)!i
                  Bringt aber nichts ... Es kommt mindestens einmal vor.

                  Kommentar


                  • #10
                    hasse recht!

                    Kommentar


                    • #11
                      Okay, danke für eure Geduld. Nun klappt es .

                      Kommentar


                      • #12
                        jetzt können fleißig contents beim spiegel geklaut werden

                        Kommentar


                        • #13
                          Original geschrieben von jens76
                          jetzt können fleißig contents beim spiegel geklaut werden
                          Haha, ja, theoretisch. Ist aber nur ein Beispiel gewesen. Ich brauche das für etwas internes.

                          Kommentar


                          • #14
                            ach so intern..

                            @onemorenerd
                            wozu gibts eine passwort vergessen abfrage?
                            oder er hat ein standartpasswort

                            Kommentar


                            • #15
                              OffTopic:
                              Okay, dann hat er sich nach so langer Zeit zumindest noch an seinen Benutzernamen, seine Emailadresse oder sonstwas erinnert. So ganz ohne alles kommt er hier ja nicht zum Posten.
                              Ist mir auch egal. Ich wollte nur auf die Regeln hinweisen.
                              Hat mit Stehkunst übrigens nichts zu tun.

                              Kommentar

                              Lädt...
                              X