Bitte Hilfe bei preg_match_all

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

  • Bitte Hilfe bei preg_match_all

    Hi Leute,

    preg_match_all ist einer dieser Sachen wo ich bis heute nicht wirklich durchblicke.
    Wahrscheinlich ist es eh keine große Sache, aber ich weiß einfach nicht weiter.
    Und bitte schickt micht nicht auf Google!
    Denn wenn ich nicht weiß wonach ich suchen soll nutzt mir Google ja leider auch nix.

    PHP-Code:
    preg_match_all("|<[item]+>(.*)</[item>]+>|Uis",$content,$Items1,PREG_SET_ORDER); 
    Das ist meine kleine Zeile.
    Sie sucht mir alle Vorkommen zwischen <item>...</item>
    Funktioniert ja auch bestens.
    Leider habe ich aber auch RSS-Feeds - ja genau um die gehts im Script - wo auch folgendes stehen könnte:
    <item rdf:about="http://www.welt.de/z/newsticker/?nid=456500">...</item>
    about="..." kann und ist immer anders.

    Jetzt dachte ich ich könnte das so lösen:
    PHP-Code:
    preg_match_all("|<[item](.*)>(.*)</[item>]+>|Uis",$content,$Items1,PREG_SET_ORDER); 
    ...was leider ein Schlag ins Gesicht war.

    Wie kann ich dem Dödel jetzt sagen suche alles was zwischen <item.....>......</item> steht?

    Ich hoffe auf Eure Kande!
    Danke und liebe Grüße
    bidgo - Benzin im Blut
    Wir wollen Dich und Deine Karre
    Videoblog & Bilderblog zu verschiedenen Bereichen

  • #2
    Aus der Hüfte geschossen:
    PHP-Code:
    preg_match_all("|<item(>|\s){1,1}(.*)</item>|Uis",$content,$Items1,PREG_SET_ORDER); 
    Kurz gesagt nach <item muss entweder genau ein > oder ein Whitespace kommen.

    Kommentar


    • #3
      Hi Pennywise,

      danke mal für die Antwort!
      Leider spuckt er mir damit eine Fehlermeldung aus:
      Warning: preg_match_all() [function.preg-match-all]: Unknown modifier ')'

      Ich denk mal dass es am (>|s) liegt, kann es aber leider nicht verifizieren.
      Dennoch danke für die Bemühung!
      lg.
      Werner
      bidgo - Benzin im Blut
      Wir wollen Dich und Deine Karre
      Videoblog & Bilderblog zu verschiedenen Bereichen

      Kommentar


      • #4
        Ich hab's ja nicht getestet - war eher als Denkanstoß gedacht. versuch das mal :
        PHP-Code:
        preg_match_all("/\<item(\>|\s){1,1}(.*)\<\/item\>/Uis",$content,$Items1,PREG_SET_ORDER); 
        Edit: Irgendwie zerschießt die Boardsoft das Escapen von Zeichen...

        Gehe am besten auf zitieren und kopiere den Code da heraus.
        Zuletzt geändert von Pennywise; 15.01.2006, 22:01.

        Kommentar


        • #5
          PHP-Code:
          preg_match_all("/<item[^>]*>(.*)<\\/item>/Uis",$content,$Items1,PREG_SET_ORDER); 
          Ich schiesse einfach auch mal aus der Hüfte.
          Getestet auf der Webseite von derHund

          Gruss

          tobi
          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


          • #6
            Hi Leute - schönen guten Morgen,

            jahlives > Dein Code hätte es fast geschafft. Leider stockt er bei einigen RSS-Feeds, die aber gleich aufgebaut sind wie andere wo er es richtig herausfiltert.
            Pennivise > auch Dir ein riesen Dankeschön.

            Lasst es gut sein - ich habe eine andere Lösung gefunden, die zwar nicht so sauber ist aber funktioniert (bis jetzt).

            Ich wäre ja viel lieber dafür, dass sich die RSS-Anbieter an einen einzigen Standard halten würden und jedes RSS-Feed gleich aufgebaut ist.
            Das würde so einiges an Arbeit ersparen und man könnte damit leichter umgehen.

            Ich habs jetzt mal folgenderweise probiert:
            PHP-Code:
            preg_match_all("|<[item]+>(.*)</[item>]+>|Uis",$content,$Items1,PREG_SET_ORDER);
            $i=0;
            foreach(
            $Items1 as $indx=>$var){
             
            $this->Items[$indx]=$var[1];
             
            $i++;
            }
            if(
            $i<1)
            {
             
            preg_match_all("|<[item rdf:about=/\"(.*)/\"]+>(.*)</[item>]+>|Uis",$content,$Items1,PREG_SET_ORDER);
             foreach(
            $Items1 as $indx=>$var){
              
            $this->Items[$indx]=$var[1];
             }

            Ist zwar ein bisserl umständlich, aber der Zweck heiligt die Mittel.
            Eigendlich wollte ich mir die Schleife ersparen.

            Dennoch vielen Dank für die Unterstützung!
            lg.
            Werner
            bidgo - Benzin im Blut
            Wir wollen Dich und Deine Karre
            Videoblog & Bilderblog zu verschiedenen Bereichen

            Kommentar


            • #7
              @web4free
              Kannst du mal einen solch fraglichen Link posten, damit ich ihn auch mal durch den RegExp jagen kann ?

              Danke und Gruss

              tobi
              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


              • #8
                Original geschrieben von jahlives
                @web4free
                Kannst du mal einen solch fraglichen Link posten, damit ich ihn auch mal durch den RegExp jagen kann ?

                Danke und Gruss

                tobi
                Ja klar keine Frage!
                Ich gebe Dir mal die 2 RSS-Feeds bei denen mir das aufgefallen ist.
                Zum einen "die Welt" wo es tatellos passt,
                zum Anderen die "Financial Times Deutschland" wo es nicht mehr passt.

                http://www.welt.de/z/newsticker/ticker_welt.xml
                http://www.ftd.de/static/ticker/ftd-topnews.rdf

                Ich kann auch wenns hilft die Classe xml-parser und den Code den ich habe anhängen.
                Ich bin mir aber sicher, dass es nur am richtigen regulären Ausdruck hängt.

                Wie schon gesagt, ich blick mich mit den Regulären Anweisungen bis heute nicht durch - Schande eigendlich als Programmierer.
                bidgo - Benzin im Blut
                Wir wollen Dich und Deine Karre
                Videoblog & Bilderblog zu verschiedenen Bereichen

                Kommentar


                • #9
                  Kannst du mal den Link in der Form <item>....</item> wo es nicht passt posten ? Nur der href bringt ned viel...

                  Danke und Gruss

                  tobi
                  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


                  • #10
                    Sorry - es ist ja noch zeitig in der Früh

                    Also hier passte es (Welt.de):
                    PHP-Code:
                    <item rdf:about="http://www.welt.de/z/newsticker/?nid=463261">
                    <
                    title>Hier steht der Titel</title
                    <
                    link>Da der Link</link
                    <
                    dc:date>2006-01-16T08:50:21+01:00</dc:date
                    </
                    item
                    Und da hab ich das Problem:
                    PHP-Code:
                    <item rdf:about="http://www.ftd.de/pw/in/38875.html?nv=cd-rss">
                    <
                    title>Hier der Titel</title
                    <
                    link>Da der Link</link
                    <
                    description>Und da noch die Beschreibung</description
                    </
                    item
                    Das ist jetzt sicher der Ehrgeiz gell?
                    Wie gesagt, es ist nimmer so extrem wichtig, weil ich es mit der Schleife gemacht habe.
                    Aber dennoch danke für die Bemühungen.

                    lg.
                    Werner
                    bidgo - Benzin im Blut
                    Wir wollen Dich und Deine Karre
                    Videoblog & Bilderblog zu verschiedenen Bereichen

                    Kommentar


                    • #11
                      Also der angegebene Link funzt gemäss Seite von der Hund sehr wohl. Ich kriege damit alles rausgeschnitten was zwischen <item> und </item> steht. Und so war doch die Aufgabenstellung, wenn ich dich recht vestanden habe.

                      Gruss

                      tobi
                      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


                      • #12
                        Sehr komisch!

                        Dann liegt der Fehler irgendwo anders.
                        Dennoch, vielen herzlichen Dank für die Bemühung.
                        Ich lasse es jetzt mal so wie ich es gelöst habe, auch wenns unschön sein sollte.
                        Ich bin ja mit dem RSS-Reader ja sowieso noch nicht zu 100% fertig!
                        Gibt es ja noch einige Feinheiten die ich lösen muß!

                        Danke jedenfalls und lassen wir dieses Thema mal ruhen.
                        Sollte ich auf den Fehler draufkommen, poste ich es hier auf alle Fälle!!!

                        lg.
                        Werner
                        bidgo - Benzin im Blut
                        Wir wollen Dich und Deine Karre
                        Videoblog & Bilderblog zu verschiedenen Bereichen

                        Kommentar


                        • #13
                          Also wenn du auch dir URL matchen willst, dann probier doch das
                          PHP-Code:
                          preg_match_all("/<item rdf:about=([^>]*)>(.*)<\/item>/Uis",$content,$Items1,PREG_SET_ORDER); 
                          --> $Items1[1] --> die URL
                          --> $Items[2] --> alles zwischen <item> und </item>

                          Gruss

                          tobi
                          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