Ankündigung

Einklappen
Keine Ankündigung bisher.

Frage zu Regex

Einklappen

Neue Werbung 2019

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

  • Frage zu Regex

    Hallo,

    bin neu hier und gleich eine Frage an Profis. Ich versuche eine Seite zu parsen und suche nach einem bestimmten Muster mit "preg_match_all".

    PHP-Code:
    preg_match_all('/<h3 class=["\']r["\']>(.+)/'$html$matches); 
    Nun ist es so dass ich zwar denn ersten Vorkommen finde aber halt nicht das Ende des H3-Tags. Habe da schon einiges ausprobiert, komme leider nicht weiter.

    Ein Teil mit H3 kann z.B. so aussehen

    Code:
    <h3 class="r"><a href="/shopping/product/3762254042865468209?q=kurze+jeans&safe=off&rls=en&gbv=1&prds=paur:ClkAsKraX7APdABDfX0pnYRJEsvxlagCjQm3ktv6GsyQ5XVe81cuCziL7BFibeiSRIWvMIspo3E43K1JD3tACA1y3baLHdQCA7aMM69Qc_UMuSig59kUBIZAFPVH73T8dRUn7ssdkhnFhNzUINlceU8UQ&sa=X&ei=rOJdVKO2D4jzPMOVgQg&ved=0CCkQ8wIwAA">
    Ultra
    <b>kurze Jeans</b>
    Hot-Pants im Destroyed-Look mit herausschauenden ...
    </a>
    </h3>
    Ich muss an Inhalt zwischen A-Tag kommen oder zumindest an ganzen H3-Tag, um weiter zu verarbeiten.

    Jemand eine Idee?

    Gruß

  • #2
    Hi,

    hiermit ist es vermutlich einfacher: http://simplehtmldom.sourceforge.net/

    mfg Wolf29
    while (!asleep()) sheep++;

    Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

    Kommentar


    • #3
      Regex ist nicht dazu gedacht bzw. geeignet HTML zu parsen. Genau dafür gibt es solche "Tools", hier noch etwas dazu: http://htmlparsing.com/php.html
      The string "()()" is not palindrom but the String "())(" is.

      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
      PHP.de Wissenssammlung | Kein Support per PN

      Kommentar


      • #4
        Super, danke für den Tipp.

        Falls es jemanden interessiert, hier ist die Lösung:

        PHP-Code:
        $dom = new DOMDocument();
        @
        $dom->loadHTML($html);
                    
        foreach(
        $dom->getElementsByTagName('h3') as $link)
        {
             if (
        $link->getAttribute('class') == 'r')
             {
                echo 
        $link->textContent;
             }

        Kommentar


        • #5
          PHP-Code:
          @$dom->loadHTML($html); 
          Copy/Paste im Halbschlaf oder was versprichst Du Dir von dem @ vorweg?!
          Competence-Center -> Enjoy the Informatrix
          PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

          Kommentar


          • #6
            Fehlerunterdrückung, weil zum Beispiel kein Mensch heutzutage eine fehlerfrei Webseite schreibt.

            Man kann das auch so machen:

            PHP-Code:
            $formerState libxml_use_internal_errors(false);
                
            // Seiteneffekt: Disabling will also clear any existing libxml errors.
            $dom->loadHTML($html);  
            libxml_use_internal_errors($formerState); 
            - http://php.net/manual/de/function.li...nal-errors.php

            Kommentar


            • #7
              Wofür das @ steht, weiß ich... Ich wollte wissen, ob der TE sich dessen bewußt ist und darauf hinweisen, daß das zur evtl. Fehlersuche sinnfrei ist.
              Competence-Center -> Enjoy the Informatrix
              PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

              Kommentar


              • #8
                Ja, ich weiß, dass du das weißt. (Ich schreibe so was auch immer für Mitleser, falls das öfter mal übertrieben detailliert ist, sorry. )

                Kommentar

                Lädt...
                X