0

CSS ファイルをいじっていて、PHP を使用して CSS ファイルをトラバースしようとしています。私が探しているのは、正規表現を使用して url() セレクター内の画像パスをキャプチャすることです (より高速な方法はありますか?)。

これまでのところ、次の式を見つけることができました: url(([^)]+))
しかし、それは 100% 探しているものではありません。URL セレクターを見つけてその中のすべてをキャプチャーする式が必要です。つまり、コードに引用符または単一引用符が含まれている場合、それらはキャプチャーされません。例: url("images/sunflower.png") キャプチャされた文字列は、images/sunflower.png のみである必要があります。

助けに感謝します。

4

3 に答える 3

2

回避できる場合は、車輪の再発明をしないでください...

インターネット上で無料で入手できる CSS パーサーは多数あります。それがどのように行われるか知りたい場合は、オープンソースのものの 1 つを開いて、それがどのように行われるかを確認してください。見つけるのに 2 分かかった例を次に示します。

https://github.com/sabberworm/PHP-CSS-Parser#value

URL を抽出する方法も実際に示している部分を指摘しました。

于 2013-06-15T12:53:30.763 に答える
1

サイズはこちらをお試しください。で始まる文字列では機能しませんurl(が、実際の CSS を解析している場合、とにかくセレクターまたはプロパティなしで開始することは無効です。

$data =' #foo { background: url("hello.jpg"); } #bar { background: url("flowers/iris.png"); }';
$output = array();
foreach(explode("url(", $data) as $i => $a) { // Split string into array of substrings at boundaries of "url(" and loop through it
    if ($i) {
        $a = explode(")", $a); // Split substring into array at boundaries of ")"
        $url = trim(str_replace(array('"',"'"), "", $a[0])); // Remove " and ' characters
        array_push($output, $url);
    }
} 
print_r($output);

出力:

Array ( [0] => hello.jpg [1] => flowers/iris.png )
于 2013-06-15T13:24:04.303 に答える
0

私はbPratikの答えに同意しますが、おそらく必要なのは次のとおりです。

preg_match('/url\([\'"]?([^)]+?)[\'"]?\)/', 'url("images/sunflower.png")', $matches);

/**
url\( matches the url and open bracket
[\'"]+? matches a quote if there is one
([^]+?) matches the contents non-greedy (so the next closing quote wont get stolen)
[\'"]? matches the last quote
) matches the end.
*/

var_dump($matches);
array(2) {
  [0]=>
  string(27) "url("images/sunflower.png")"
  [1]=>
  string(20) "images/sunflower.png"
}
于 2013-06-15T13:27:06.077 に答える