1

我发现很多关于从 img-tag 中提取文件名的帖子,但没有从 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);

但这没有成功。

任何帮助表示赞赏..

4

3 回答 3

2

您需要阅读有关正则表达式的信息。

"/background-image: ?.png/"

表示“背景图像:”后跟可选的空格,后跟任何单个字符,然后(直接)后跟“png”。

您需要的确切内容取决于您需要在标签布局中允许多少变化,但这将类似于

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

其中所有“\s*”都是可选空格,括号捕获不包含斜杠的内容。

一般来说,正则表达式不是解析 HTML 的好工具,但在这种有限的情况下,它可能没问题。

于 2010-12-13T12:53:39.750 回答
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'];
}
于 2010-12-13T12:59:12.807 回答
0

大体上的东西

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

它不适用于包含'or的文件名"。它基本上匹配括号之间的任何url()内容不是'"

于 2010-12-13T12:59:24.460 回答