Zeichenkette zerlegen und Inhalt filtern

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

  • Zeichenkette zerlegen und Inhalt filtern

    Hi

    Ih habe eine URL in einer Variable. In dieser URL kommt IMMER folgendes vor:
    /testvXXXXX/
    Wobei XXXXX für eine Nummer steht die nicht immer gleich lang ist.

    Gibt es eine einfache Möglichkeit diese Nummer herauszubekommen?

    Habe zuerst an parse_url gedacht, komme jedoch dort mit path nicht weiter. Wie bekomme ich da am bessten nur die nummer raus?

    Danke schonmal für eure Hilfe.

    Gruss

    Olli

  • #2
    Poste mal bitte einige Beispiele, wie diese Variable aussehen kann. So würde ich zu Regulären Ausdrücken raten, aber möglicherweise gehts auch (simpler) mit String-Funktionen.
    PHP-Code:
    $string 'testv12345';

    preg_match('/testv(\\d+)/'$string$matches); // $matches speichert die Treffer des Musters

    echo '<pre>';
    print_r($matches); // formatierte Ausgabe des Resultats
    echo '</pre>'
    Grüße
    Nieder mit der Camel Case-Konvention

    Kommentar


    • #3
      wenn der erste immer Teil vor demm XXXXX immer gleich ist
      reicht ein einfachs substr

      PHP-Code:
      $test='testv12345';
      $wert=substr($test,5);

      oder

      $test
      ="/testv12345/";
      $wert=substr($test,6,-1); 
      in beiden fällen enthält $wert jetzt 12345
      Zuletzt geändert von martin_duisburg; 17.05.2008, 11:28.
      ad astra
      --- bin nun mal Perry Rhodan Fan ---

      Kommentar


      • #4
        Original geschrieben von martin_duisburg
        wenn der erste teil : testv immer glich ist
        reicht ein einfachs substr

        PHP-Code:
        $test='testv12345';
        $wert=substr($test,5); 
        Das ist eben die Frage. Der TO schreibt, dass immer dieser Teil vorkommt, aber nicht, ob die Url unter Umständen andere Formen annehmen kann. Darüber hinaus substringst () du eine Zahl fester Länge. Du müsstest also mittels strpos und strlen oder auf anderem Wege die Länge der Zahl bestimmen - nachdem du sie überhaupt erst in der Url lokalisiert hast. Und sobald wir wissen, wie eine solche Url aussieht, kann man auch sagen, ob eine simple Regex nicht günstiger wäre.

        Grüße
        Nieder mit der Camel Case-Konvention

        Kommentar


        • #5
          ich hoffe doch das dein Einwand jedem klar ist, wollte nur darstellen
          das es auch eine andere Möglichkeit gib , wenn er feste Werte hat.

          substringst ist übrigends gut :-).
          ad astra
          --- bin nun mal Perry Rhodan Fan ---

          Kommentar


          • #6
            Hi

            Danke schonmal für eure Antworten.

            Also die URL kann immer Varieieren. Ebenso die Zahlenlänge.

            Beispiel | Ausgabewert
            http://www.domain1.tld/testv123458/i...s1/irgendwas2/ | 123458
            http://www.domain2.tld/testv15/irgendwas1/irgendwas2/ | 15
            http://www.domain3.tld/testv369/ | 369
            http://www.domain4.tld/testv679/irgendwas1/ | 679

            Also das /testvXXX/ kommt immer vor. Die url, die zusätze etc können sich variieren, genau so die Zahlenlänge.


            @Griecherus Deine Variante klappt super. Da ist jetzt eben die Frage ist die so in Ordnung, oder geht es wie du sagst einfacher?

            Gruss Olli4

            Kommentar


            • #7
              in dem Fall ist @Griecherus Variante die einfachste
              ad astra
              --- bin nun mal Perry Rhodan Fan ---

              Kommentar


              • #8
                Original geschrieben von martin_duisburg
                in dem Fall ist @Griecherus Variante die einfachste
                Hi

                Super danke.

                Wünsche allen noch ein schönes WE.

                Gruss

                Olli

                Kommentar


                • #9
                  Hi

                  Da es um ein ähnliches Problem geht, wollte ich mal Fragen wie der Reguläre ausdruck wäre um die Zahlenkette zwischen - und .html zu finden.

                  lso selbes wie oben, einfach ist die zahl zwischen dem - und .html (-45698.html

                  BIn zwar schon am durchsuchen der Regulären ausdrücke wie die gehen, bin aber da noch nicht weiter gekommen. Wenn ich /(\d+)/ nehme, nimmt er mir das erste vorkommen von zahlen. Wie kann ich ihm aber sagen das er nur die zahlen zwischen - und .html nehmen soll?

                  PS. hat jemand eine gute referenz für Reguläre ausdrücke?

                  Gruss Olli
                  Zuletzt geändert von Olli4; 17.05.2008, 15:48.

                  Kommentar


                  • #10
                    Wenn ich /(\d+)/ nehme, nimmt er mir das erste vorkommen von zahlen. Wie kann ich ihm aber sagen das er nur die zahlen zwischen - und .html nehmen soll?
                    Naja, es könnte helfen, wenn du den Bindestrich und das ".html" mit in die Expression einbaust, und das eben nicht dem Zufall überlässt.

                    PS. hat jemand eine gute referenz für Reguläre ausdrücke?
                    regexp-evaluator.de

                    Kommentar


                    • #11
                      Hi

                      Danke für die Referenz. Bin da mal am druchlesen.

                      Wie meinst du das mit in die Expression? Sorry verstehe ich grad nicht. Habe es schon mit ^- probiert, da der ^ wohl aussagt das es mit dieser zeichenkette beginnen soll. Leider noch ohne erfolg. Na jeder anfang ist schwer wird schon.

                      Danke schonmal für eure hilfe.

                      Gruss

                      Olli
                      Zuletzt geändert von Olli4; 17.05.2008, 16:18.

                      Kommentar


                      • #12
                        Wie meinst du das mit in die Expression? Sorry verstehe ich grad nicht.
                        Na, dein Ausdruck enthält z.Zt. Weder - noch .html. Woher soll PHP also wissen, dass du die Zahl dazwischen haben willst. Ist doch klar, dass die erste genommen wird.

                        Habe es schon mit ^- probiert, da der ^ wohl aussagt das es mit dieser zeichenkette beginnen soll.
                        Das ist schlicht falsch. Das ^ symbolisiert etwas den Anfang der Zeichenkette. Das heißt, dass das darauf folgende Zeichen am Anfang des durchsuchten Strings ($subject) stehen muss. Tut es aber nicht, sondern das "h" von http.

                        Kommentar


                        • #13
                          Hi

                          Super danke dir für deine Tipps

                          Habe es nun mit diesem Regex gemacht der auch FUnktioniert: /(\d+\.html)/
                          Ist dies in Ordnung, oder eher nicht zu empfehlen? Was ich noch nicht ganz verstehe:

                          Wenn ich dies so habe, bekomme ich die Zahl. Wenn ich jedoch "/(\-\d+)/ mache, bekomme ich vor den zahlen noch ein - angezeigt. Zwar nur die Zahl die nach - kommt wie erwünscht, jedoch kommt -999 statt 999. Weshalb ist dies? Beim oberen beispiel wird mir das .html ja auch nicht angehängt. Wo liegt da mein überlegungsfehler?

                          Gruss

                          Olli

                          Kommentar


                          • #14
                            OK, analyisieren wir das Ganze mal.
                            Du sucht also einen Bindestrich, gefolgt von einer beliebig langen Zahl, gefolgt von .html. Wie du eine beliebig lange Zahl in einem Ausdruck darstellst, weißt du bereits: (\d+). Jetzt musst du nur noch eins und eins zusammen zählen, die Lösung liegt vor dir.

                            Grüße
                            Nieder mit der Camel Case-Konvention

                            Kommentar


                            • #15
                              Original geschrieben von Griecherus
                              OK, analyisieren wir das Ganze mal.
                              Du sucht also einen Bindestrich, gefolgt von einer beliebig langen Zahl, gefolgt von .html. Wie du eine beliebig lange Zahl in einem Ausdruck darstellst, weißt du bereits: (\d+). Jetzt musst du nur noch eins und eins zusammen zählen, die Lösung liegt vor dir.

                              Grüße
                              Hi

                              Ja so sieht es aus. So wie oben funktioniert es, wobei er so nur auf das .html achtet. Ist dies denn überhaupt korrekt, oder nur zufall das es geht?

                              Gruss

                              Olli

                              Kommentar

                              Lädt...
                              X