2009-11-11 3 views
10

Ich versuche, das erste Attribut src ein Bild in einem Block von HTML-Text wie folgt zu extrahieren:wie eine Regex in php zurückzukehren, anstatt sie zu ersetzen

Lorem ipsum <img src="http://example.com/img.jpg" />consequat. 

Ich habe kein Problem der Schaffung der Regex mit dem src Attribut übereinstimmen, aber wie kann ich das erste übereinstimmende src Attribut anstelle von ersetzen it?

Aus dem Gießen über das PHP-Handbuch scheint es, preg_filter() würde den Trick tun, aber ich kann nicht auf Endbenutzer mit PHP> 5.3 verlassen.

Alle anderen PHP-Regex-Funktionen scheinen Variationen von preg_match() zu sein und geben einen booleschen Wert oder preg_replace zurück, der die Übereinstimmung durch etwas ersetzt. Gibt es einen direkten Weg zu zurückgeben eine Regex-Übereinstimmung in PHP?

Antwort

25

Sie können den dritten Parameter von preg_match, verwenden Sie zu wissen, was passt (es ist ein Array, als Referenz übergeben):

int preg_match (string $pattern , 
    string $subject [, array &$matches [, 
    int $flags [, int $offset ]]]) 

Falls Übereinstimmungen vorhanden ist, dann ist es gefüllt mit die Ergebnisse der Suche. $matches[0] wird den Text enthalten, die vollständige Muster übereinstimmt, $matches[1] wird den Text haben, dass die erste geklammert Submuster erfasst abgestimmt, und so weiter.


Zum Beispiel mit diesem Teil des Codes:

$str = 'Lorem ipsum dolor sit amet, adipisicing <img src="http://example.com/img.jpg" />consequat.'; 

$matches = array(); 
if (preg_match('#<img src="(.*?)" />#', $str, $matches)) { 
    var_dump($matches); 
} 

Sie finden diese Ausgabe erhalten:

array 
    0 => string '<img src="http://example.com/img.jpg" />' (length=37) 
    1 => string 'http://example.com/img.jpg' (length=23) 

(Beachten Sie, dass mein regex zu einfach ist - und Diese Regex sind im Allgemeinen nicht das "richtige Werkzeug", wenn es darum geht, Daten aus einer HTML-Zeichenfolge zu extrahieren ...)

+0

ausgezeichnet, danke. BTW, was ist "das richtige Werkzeug", um Daten aus einer HTML-Zeichenfolge zu extrahieren? –

+0

Gern geschehen :-) ;; Das ist eine knifflige Frage ^^ Ich habe ein vollständiges HTML-Dokument, ich mag die Idee, DOMDocument :: loadHTML zu verwenden (siehe http://stackoverflow.com/questions/1274020/extract-form-fields-using-regex/1274074 # 1274074 für einige Gedanken, die ich vor einiger Zeit gepostet habe) - aber es gibt auch andere Lösungen –

+0

+1 var_dump erklärte die Array-Struktur und den Inhalt. – Praesagus