2012-03-24 23 views
1

Ich möchte bestimmte Links von einer Website extrahieren.PHP: Erhalten Sie spezifische Links mit preg_match_all()

Die Links sehen wie folgt aus:

<a href="1494761,offer-mercedes-used.html"> 

Die Links sind immer gleich - außer dem Markennamen (Mercedes in diesem Fall).

Das funktioniert so weit in Ordnung, aber liefert nur den ersten Teil des Links:

preg_match_all('/((\d{7}),offer-)/s',$inhalt,$results);

Und diese liefert die erste Verbindung mit der gesamten Website :(

preg_match_all('/((\d{7}).*html)/s',$inhalt,$results);

Beliebig Ideen?

Beachten Sie, dass ich preg_match_all() und nicht preg_match().

Danke, Chama

Antwort

1

Während .*? tun würde (= weniger gierig), in beiden Fällen sollen Sie ein genaueres Muster angeben.

Hier würde [\w.-]+ tun. Aber [^">]+ könnte auch machbar sein, wenn die HTML-Quelle konsistent ist (oder Sie speziell andere Variationen ignorieren möchten).

preg_match_all('/((\d{7}),offer-[\w.-])/s',$inhalt,$results); 
1

Versuch xml/html mit Regex zu analysieren im Allgemeinen ist keine gute Idee, aber wenn Sie sicher sind, wird es immer gut formatiert werden, sollte dies keine Links in dem Inhalt zurück.

/<a href="([^">]+)">/ 

Dies wird mehr passen genau nur das Beispiel Muster, das Sie gab, aber nicht sicher, welche Variationen Sie haben könnten

/<a href="([0-9]{7},offer-[a-z]+-used\.html)">/ 
// [7 numbers],offer-[at least one letter]-used.html