preg_match_all

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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

    Comment


    • #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

      Comment


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

        Shitstorm Podcast – Wöchentliches Auskotzen

        Comment


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

          Comment


          • #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

            Comment


            • #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?
              Last edited by Snaq; 17-04-2008, 15:21.

              Comment


              • #8
                file_get_contents().

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

                Comment


                • #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

                  Comment


                  • #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).
                    Last edited by Manko10; 18-04-2008, 16:18.

                    Comment


                    • #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

                      Comment


                      • #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)

                        Comment

                        Working...
                        X