我想從使用php的css文件中提取顏色。 這些顏色可以是:使用PHP從css文件中提取顏色
- 正常顏色(顏色:#XXXXXX)
- 背景顏色(背景:#XXXXXX; /背景:... #XXXXXX ...;)
- 背景梯度(背景圖像:線性梯度(頂部,#XXXXXX,#XXXXXX);
- 有時顏色可以是3個字符(例如:#FFF)
我試圖預浸匹配返回話,從第
preg_match_all('/(?!\b)(#\w+\b)/', $css_text, $matches)
...但它也返回DIV IDS(的#header等)
展望未來,我也希望我們的代碼不僅顏色代碼也行號返回一個多維數組其所被找到。
請幫忙! :)
----------編輯:問題解決----------
三江源都爲你的答案,我有種結合每個人的答案。 因爲我想保持正則表達式來最低,這是我作爲最後的工作代碼:
$css = file_get_contents("style.css");
$token = strtok($css, "{}");
$css_parts = array();
while ($token !== false) {
$css_parts[] = trim($token);
$token = strtok("{}");
}
$flag = false; $properties = "";
foreach($css_parts as $part) {
if($flag) { $properties .= " ".trim($part); }
$flag = !$flag;
}
$properties = strtoupper(str_replace(array(":",",",";","(",")")," ",$properties));
$colors = array();
preg_match_all('/(?!\b)(#\w+\b)/',$properties,$colors);
$colors = array_unique($colors[0]);
print_r($colors);
如果展開你的表達,包括結腸,應該照顧的div編號 – 2013-02-11 19:16:28
@JeffHawthorne我想過了,但有時在「:」和「#」之間可能會有一個或多個空格 - 另外,我認爲它不會涵蓋我的需求列表的案例2和3,糾正我,如果我錯了 - 我是在寫這些表達方式的時候不是親! – Romit 2013-02-11 19:31:25
我其實剛剛讀到這個。你可以使用「:*#」來告訴它處理冒號和#之間的任意數量的空格。星號表示0到n次,如果知道至少有一個空格,則加號會起作用 – 2013-02-11 19:36:18