Div Inhalt mittels der Funktion preg_match herausfinden

  • Hey zusammen,


    ich muss in einer HTML-File 1 div mit der Klasse item_now finden. In diesem Div steht dann das aktuelle Item drin. An diesen möchte ich rankommen.


    Das ist der Tag: <div class="item_now">Tennisschläger</div>. Nun möchte ich, dass in dem array Matches der Tennisschläger mir zurückgegeben wird.

    Ich habe bereits viel gegoogelt und ausgetestet. Jedoch kommt immer array(0) {} raus.


    Das ist mein Code mit dem ich es versucht habe:

    PHP
    <?php
    
    $aktuelleItems = file_get_contents("sites/aktuelleItems.html");
    
    
    $pattern = "/<div class='item_now'>(*?)<\/div>/";
    
    preg_match($pattern, $aktuelleItems, $matches);
    var_dump($matches);

    Was mache ich falsch?


    Grüße,

    Stef

  • Dein Pattern wird nicht matchen, aber:

    1. Wie sollen wir das beurteilen, wenn wir den Quelltext der aktuelleItems.html nicht kennen.
    2. Ist - sofern das HTML valide ist - DOMDocument/DOMXPath besser für sowas geeignet.
  • Kann man auch mit preg_match_all() machen.


  • Hey,


    An DomDocument habe ich auch schon gedacht. Jedoch bietet diese Klasse keine Funktion an um Klassen anzusprechen sondern nur Ids. Das war der Punkt warum ich DomDocument nicht genommen habe.


    Zitat


    Wie sollen wir das beurteilen, wenn wir den Quelltext der aktuelleItems.html nicht kennen.

    Die aktuelleItems.html sieht so aus (nur als html):


    cottton : Vielen Dank für ein Beispiel sowie die Erklärung zum Pattern.



    Grüße,

    Stef

  • An DomDocument habe ich auch schon gedacht. Jedoch bietet diese Klasse keine Funktion an um Klassen anzusprechen sondern nur Ids. Das war der Punkt warum ich DomDocument nicht genommen habe.

    #2 immer noch nicht gelesen?! Da steht bspw. auch was von DOMXPath, einafcher gehts kaum noch...


    Allerdings wird das Ganze dann so kryptisch, dass man bzgl. Lesbarkeit kaum noch einen Vorteil gegenüber Regex hat.

    WHAT???

    PHP
    $oDom = new DomDocument();
    $oDom->loadHTML( $html );
    
    $oXPath = new DOMXPath( $oDom );
    $oNodeList = $oXPath->query( '//li[@class="item_now"]' );
    
    foreach ( $oNodeList as $node )
        echo $node->nodeValue . '<br>';

    Überraschende Ausgabe:

    Code
    Fußball
    Fahrradhelm
    Regenjacke
    Handschuhe
    Sportschuhe
    Tennisschläger
    Handball
    Fahrrad

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!