2010-12-13 2 views
1

Я нашел много сообщений об изъятии имени файла из img-тега, но ни одного из тега стиля встроенного CSS. Вот исходная строкаКак извлечь имя файла изображения из тега style/background-image?

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

То, что я хочу, чтобы это bar.png.

Я попытался это:

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

Но это не работало из.

Любая помощь приветствуется ..

+0

«/ фоновое изображение: URL \\ (([^ \\)] +) \\)/сми – henklein

+0

То же решение, как [Регулярное выражение для захват атрибута href элемента A] (http://stackoverflow.com/questions/3820666/regular-expression-for-grabbing-the-href-attribute-of-an-a-element). Используйте DOM для извлечения атрибута стиля, затем используйте регулярное выражение для захвата значения фонового изображения. – Gordon

ответ

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

отлично, это сделало трюк для меня. Спасибо! – cukabeka

2

Вы должны прочитать о регулярных выражениях.

"/background-image: ?.png/" 

означает «фоновое изображение:», а затем, возможно, пробел, за которым следует какой-либо один символ, а затем (непосредственно) с помощью «PNG».

именно то, что вам нужно, зависит от того, как много изменений необходимо учитывать в расположение тега, но это будет что-то как

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

, где все «\ S *» являются обязательными пробелы и скобки фиксируют то, что не содержит косой черты.

Как правило, regexp не является хорошим инструментом для анализа HTML, но в этом ограниченном случае это может быть ОК.

+0

. В вашем регулярном выражении '' 'должно быть'. ' – Pit

+0

Исправлено. Спасибо. –

0

что-то вдоль линий

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

это не будет работать для имен файлов, содержащих ' или ". Это в основном соответствует ничего между скобкой url(), который не ' или "

Смежные вопросы