Как извлечь имя файла изображения из тега style / background-image? - PullRequest
1 голос
/ 13 декабря 2010

Я нашел много постов, касающихся извлечения имени файла из тега img, но ни одного из тега встроенного стиля CSS. Вот исходная строка

<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);

Но это не сработало.

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

Ответы [ 3 ]

2 голосов
/ 13 декабря 2010

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

"/background-image: ?.png/"

означает «background-image:», за которым необязательно следует пробел, за которым следует любой отдельный символ, за которым (непосредственно) следует «png».

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

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

где все "\ s *" являются необязательными пробелами, а в скобках записано то, что не содержит косой черты.

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

1 голос
/ 13 декабря 2010
$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 голосов
/ 13 декабря 2010

что-то вроде строк

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

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

...