preg_match Problem

  • Hallo ihr Lieben,


    ich zerbreche mir nun schon seit Stunden den Kopf.


    Ich habe folgenden String

    Code
    <ul class="links"><li><a class="button" href="http://www.meinlink.de/" itemprop="url">Details</a></li>


    Daraus würde ich gerne per preg_match_all den Link abgreifen, leider komme ich einfach nicht weiter, die Rückgabe ist leer.


    PHP
    preg_match_all('/<a\s+class="button"\s+href="(.*)"\s+itemprop="url">/', $str, $link);



    Kann mir jemand sagen wo der Fehler ist?


    LG

  • Funktioniert hier einwandfrei… ;)


    PHP
    <?php
    
    
    
    
    $string = '<ul class="links"><li><a class="button" href="http://www.meinlink.de/" itemprop="url">Details</a></li>';
    var_dump(preg_match_all('/<a\s+class="button"\s+href="(.*)"\s+itemprop="url">/', $string, $matches), $matches);



    Übrigens würde ich .* durch .*? ersetzen, oder gleich durch [^"]+ – oder gleich einen DOM-Parser verwenden, wenn es komplexer wird! :)



    MfG Christian

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Zu beachten: preg_match und preg_match_all geben nicht deine "matches" zurück, diese landen in der $link Variable.


    Siehe dazu: PHP: preg_match_all - Manual

    Quote

    Returns the number of full pattern matches (which might be zero), or FALSE if an error occurred.


    Kleiner Tipp: Online regex tester and debugger: JavaScript, Python, PHP, and PCRE hier kann man super leicht regex erstellen und direkt validieren. In deinem Falle würde ich folgenden Regex verwenden:

    PHP
    preg_match_all('/href="(?P<url>.*)"/U', $str, $link);
    echo $link['url'];