preg_match_all

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

  • preg_match_all

    hallo,

    ich habe ein Problem.
    Ich möchte auf einer Seite den Namen auslesen, der etwa so in der Form ist
    <span class='klein_txt'> Name </span>

    also habe ich das mal so probiert, aber das liefert mir keine Antwort


    PHP-Code:
    preg_match_all("%<span class='klein_txt'>(.+?)<\/span>%is"$namecode$name);
    echo 
    $name[0]; 
    PS: vor dem /span im pattern ist ein escapestring der allerdings im code nicht angezeigt wird.

    in $namecode ist der ganze text in dem gesucht wird und in $name soll das gespeichert werden.


    Könnt ihr mir da weiter helfen?

    Mfg Snaq

  • #2
    Hi,

    mal ein print_r($name) gemacht?

    LG

    Kommentar


    • #3
      ' für den Regex anstatt " benutzen!
      " gehört um den Attributwert des span-tags (Wennn dort tatsächlich ein ' sein sollte, dann lieber escapen)

      PS: Normale Code-Tags benutzen, dann sieht man auch die Backslashes

      Kommentar


      • #4
        Warum zum Geier maskierst du den Slash?
        [FONT="Helvetica"]twitter.com/unset[/FONT]

        Shitstorm Podcast – Wöchentliches Auskotzen

        Kommentar


        • #5
          Code:
          (.+?)
          Das Fragezeichen kannst du dir eigentlich sparen!

          Kommentar


          • #6
            Ich nehm genau deinen Ausdruck (ob mit oder ohne escape! - übrigens wenn du den Backslashes verdoppelst, sieht man ihn hier auch) und der funktioniert perfekt. Die Einwände von unset und PHP-Desaster sind zwar richtig, haben aber eigentlich nichts mit dem (scheinbar nicht existenten) Problem zu tun.

            @$_Baker
            Solche Behauptungen, die nichts mit dem Problem zu tun haben, verwirren nur.
            Gruss
            H2O

            Kommentar


            • #7
              danke für die hilfe,
              ich habe das pattern jetzt angepasst

              Code:
              preg_match_all('%<span class=\\'klein_txt\\'>(.+)</span>%is', $namecode, $name);
              aber einscheinend lese ich die seite falsch aus.
              könnt ihr mir da weiter helfen?

              zur zeit mache ich das so

              Code:
              $namestatus = fopen("http://fun.ciasrv101.de/scripts/userdetails.php?userid=67", "r")
               or die($php_errormsg);
                while(! feof($namestatus))
                  {
                  $namecode .= fread($namestatus, 15000000);
                  }
                fclose($namestatus);
              der quellcode welcher in $namestatus gespeichert wird ist aber nicht derselbe wie wenn ich die seite normal über den browser aufrufe. könnt ihr mir da helfen?
              Zuletzt geändert von Snaq; 17.04.2008, 16:21.

              Kommentar


              • #8
                file_get_contents().

                @H2O: Begründung, warum das nichts mit dem Problem zu tun hat?

                Kommentar


                • #9
                  Original geschrieben von $_Baker
                  Begründung, warum das nichts mit dem Problem zu tun hat?
                  Begründung, warum Regex in Hochkommas und Attributwerte in Anführungszeichen stehen sollen?
                  Gruss
                  H2O

                  Kommentar


                  • #10
                    Ganz einfach: Attribut-Werte in Anführungszeichen => HTML-Standard
                    RegEx in Hochkommata => Dann hast du kein Problem mit Variableninterpolation. Als Beispiel:
                    PHP-Code:
                    preg_match("#^abc(.+)def$#is""$1"$text); 
                    gibt nur Probleme. Du müsstest ziemlich viel herumescapen (und zwar sowohl im RegEx als auch im Replace - also für beides Hochkommata benutzen).
                    Zuletzt geändert von Manko10; 18.04.2008, 17:18.

                    Kommentar


                    • #11
                      Original geschrieben von Manko10
                      Attribut-Werte in Anführungszeichen => HTML-Standard
                      Wo steht das? Es wird zwar immer wieder behauptet, ist aber ein Gerücht. Ich habe jetzt keine Lust, die ganze W3C-Definition zu durchsuchen, als Ersatz einfach soviel
                      Original geschrieben von Selfhtml
                      Obwohl es vom HTML-Standard her zulässig wäre, dass bestimmte Attributwerte auch ohne Anführungszeichen geschrieben werden können, sollten Sie diese Möglichkeit nicht nutzen. Es verringert die Wahrscheinlichkeit von Fehlern, wenn Sie grundsätzlich alle Werte, die Sie Attributen zuweisen, in einfache ' oder doppelte " Anführungszeichen setzen. Sie können diese zwei Arten innerhalb einer Datei beliebig mischen, lediglich für ein einzelnes Attribut müssen an Anfang und Ende dieselben Zeichen benutzt werden. Welches Zeichen Sie wählen, ist im Prinzip egal.
                      Gruss
                      H2O

                      Kommentar


                      • #12
                        Mal ne Anmerkung wegen dem ? das so schnell als unnötig deklariert wurde
                        Code:
                        preg_match('/<span>(.+)<\/span>/is');
                        wird doch im geklammerten Treffer </span> ebenfalls matchen. Dies da der Ausdruck als ganzes Greedy ist. Imho wäre
                        Code:
                        preg_match('/<span>(.+?)<\/span>/is');
                        //oder
                        preg_match('/<span>(.+)<\/span>/iUs');
                        korrekt...
                        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                        Kommentar

                        Lädt...
                        X