Regulärer Ausdruck für HTML:Bitte um Hilfe!!

NanoNuna

Mitglied
Hallo,

ich habe folgendes Problem.

Möchte aus diesem Codefragment "/products/890111/" herausbekommen.
HTML:
<tr class="bright"><td align="right">890111</td>
    <td><a href="/products/890111/">Tierstimmen</a></td>
    <td>1 CD (73 Min.)</td>
    <td align="right">9.90 EUR</td>
</tr>

Habe es mit folgendem Ausdruck in PHP versucht:
PHP:
$reg_muster = "/\<a\s*href=\"?\/products\/\d*\/\"?\>/i";
preg_match ($reg_muster, $html_body, $matches);
print_r ($matches);

Leider bekomme ich ein leeres Array, wenn ich "$matches" aufrufe.

Könnte mir jemand sagen, was an meine Regluären Ausdruck falsch ist?

Vielen Dank.

Gruß
Nano
 
Mein Vorschlag:
PHP:
'@<a[^>]+href=(["\']?)/products/\d+/\1[^>]*>@is'
Wenn alle betreffenden Attributwerte in doppelten Anführungszeichen stehen, kannst du auch folgenden Ausdruck nehmen:
PHP:
'@<a[^>]+href="/products/\d+/"[^>]*>@is'
 
Hi Gumbo,

ich werde das mal testen, habe aber noch ein paar Fragen zu dem Ausruck.

Was bedeutet dieses "@" Zeichen da müsste doch normalerweise ein "/" stehen?

Und was bezweck man mit dem folgendem?

PHP:
....(["\']?)......\1[^>]

Vielen Dank.

Gruß
Nano
 
PHP:
$str ='<tr class="bright"><td align="right">890111</td>
    <td><a href="/products/890111/">Tierstimmen</a></td>
    <td>1 CD (73 Min.)</td>
    <td align="right">9.90 EUR</td>
</tr>';

preg_match('/href="([^"]+)"/i', $str, $treffer);
print '<pre>';
var_dump($treffer);
 
Er sucht zu erst nach href="
Danach schaut er mit [^"], dass das nächste Zeichen nicht ein " ist.
Das + bedeutet, dass etwas einfach o. mehrfach zutriffft.
Zu guter letzt das i dient dazu, dass er nicht case sensitive sucht.

Schau mal diese Tutorial an.
 
Da du 'href="' nicht im Ergebnis haben möchtest empfehle ich folgendes Pattern:
'/(?<=href=").+(?=">)/'

(?<=href=") prüft ob vor dem Match href=" steht
.+ jedes beliebige Zeichen, mehrfaches Auftreten
(?=">) prüft ob nach dem Match "> steht
 
Zuletzt bearbeitet:
Zurück