2010-12-13 5 views
1

Ich habe viele Posts bezüglich des Verlöschens eines Dateinamens von einem img-Tag, aber keines von einem CSS-Inline-Stil-Tag gefunden. Hier ist die QuellzeichenfolgeWie man den Bilddateinamen aus dem style/background-image Tag extrahiert?

<span style="width: 40px; height: 30px; background-image: url("./files/foo/bar.png");" class="bar">FOO</span> 

Was will ich bekommen ist bar.png.

Ich versuchte dies:

$pattern = "/background-image: ?.png/"; 
    preg_match($pattern, $string, $matches); 

Aber das nur knapp sein Ziel aus arbeiten.

Jede Hilfe willkommen ..

+0

‚/ Hintergrund-Bild ist: url \\ (([^ \\)] +) \\)/smi – henklein

+0

gleiche Lösung wie [Regulärer Ausdruck für ergreift das href-Attribut eines A-Elements] (http://stackoverflow.com/questions/3820666/regular-expression-for-grabbing-the-href-attribute-of-a-a-element). Verwenden Sie DOM, um das style-Attribut abzurufen, und verwenden Sie dann einen regulären Ausdruck, um den background-image-Wert abzurufen. – Gordon

Antwort

1
$string = '<span style="width: 40px; height: 30px; background-image: url("./files/foo/bar.png");" class="bar">FOO</span>'; 

$pattern = '/background-image:\s*url\(\s*([\'"]*)(?P<file>[^\1]+)\1\s*\)/i'; 
$matches = array(); 
if (preg_match($pattern, $string, $matches)) { 
    echo $matches['file']; 
} 
+0

großartig, das hat den Trick für mich gemacht. Danke! – cukabeka

2

Sie müssen sich über reguläre Ausdrücke lesen.

"/background-image: ?.png/" 

bedeutet „Hintergrundbild“ von einem Raum, gegebenenfalls gefolgt von einem einzelnen Zeichen folgt, (direkt) von „PNG“ gefolgt.

Genau das, was Sie brauchen, hängt davon ab, wie viel Variation müssen Sie im Layout des Etiketts ermöglichen, aber es wird etwas wie

"/background-image\s*:\s*url\s*(\s*".*([^\/]+)"/ 

, wo alle „\ s *“ sind optional Leerzeichen und Klammern enthalten etwas, das keinen Schrägstrich enthält.

Im Allgemeinen ist regexp kein gutes Werkzeug zum Parsen von HTML, aber in diesem begrenzten Fall könnte es OK sein.

+0

Das ',' in Ihrer Regex sollte ein '.' Sein. – Pit

+0

Korrigiert. Vielen Dank. –

0

etwas entlang der Linien

$style = "width: 40px; height: 30px; background-image: url('./files/foo/bar.png');"; 
preg_match("/url[\s]*\(([\'\"])([^\'\"]+)([\'\"])\)/", $style, $matches); 
var_dump($matches[2]); 

es wird nicht für Dateinamen arbeiten, die ' oder " enthalten. Sie paßt im Grunde alles, was zwischen den Klammern von url(), die nicht ' oder "