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/"

「background-image:」、オプションでスペース、任意の1文字、(直接)「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]);

'またはを含むファイル名では機能しません"url()それは基本的に、そうでない'かかっこの間のすべてに一致します"

于 2010-12-13T12:59:24.460 に答える