Как извлечь имя файла изображения из тега style/background-image?
Я нашел много постов, касающихся извлечения имени файла из тега 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 ответа
$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'];
}
Вы должны прочитать о регулярных выражениях.
"/background-image: ?.png/"
означает "background-image:", за которым необязательно следует пробел, за которым следует любой отдельный символ, за которым (непосредственно) следует "png".
Точно то, что вам нужно, зависит от того, сколько вариаций нужно учесть в макете тега, но это будет что- то вроде
"/background-image\s*:\s*url\s*(\s*".*([^\/]+)"/
где все "\s*" являются необязательными пробелами, а круглые скобки фиксируют то, что не содержит косой черты.
Как правило, регулярное выражение не является хорошим инструментом для анализа HTML, но в этом ограниченном случае все может быть в порядке.
Что -то вроде
$style = "width: 40px; height: 30px; background-image: url('./files/foo/bar.png');";
preg_match("/url[\s]*\(([\'\"])([^\'\"]+)([\'\"])\)/", $style, $matches);
var_dump($matches[2]);
это не будет работать для имен файлов, которые содержат '
или же "
, Это в основном соответствует что-либо между круглыми скобками url()
это не '
или же "