【发布时间】:2014-07-07 06:47:27
【问题描述】:
所以我正在读取一个 css 文件,我想从中获取一些数据。我目前将数据完全缩减为:
font-family: "Verdana";
font-size: 14px;
color: #000000;
为了纯粹获取我需要的数据(即 Verdana、14 和 #000000),我创建了以下 PHP 代码:
foreach($tmp as $tmpstr){
if(strpos($tmpstr, "font-family")){
$tmpres = array();
preg_match('/\"(.*?)\"/', $tmpstr, $tmpres);
$returnData["website"]["font-family"] = $tmpres[1];
} else if(strpos($tmpstr, "font-size")){
$tmpres2 = array();
preg_match_all('/\:\s(.*?)px\;/', $tmpstr, $tmpres2);
$returnData["website"]["font-size"] = $tmpres2[1];
} else if(strpos($tmpstr, "color")){
$tmpres3 = array();
preg_match_all('/color\:\s(.*?)\;/', $tmpstr, $tmpres3);
$returnData["website"]["font-color"] = $tmpres3[1];
}
}
我知道它还没有优化,但原因是它不起作用。第一个表达式 '/\"(.*?)\"/' 获得 Verdana 工作正常,但其他两个('/\:\s(.*?)px\;/' 获得字体大小,/color\:\s(.*?)\;/ 获得字体颜色)没有,而在在线测试仪中测试它们似乎确实有效.谁能告诉我我做错了什么?
谢谢!
【问题讨论】:
-
其他2个不运行,因为if\ele结构,再考虑你的逻辑
-
第一个有效,可能不是问题,但请注意
strpos()可以返回0,因此您需要将其与false进行比较,例如:if(strpos($tmpstr, "font-size") !== false) -
使用 preg 匹配所有,它是一个只有 css 样式的文件吗?您可以将整个文件提取到一个数组中,预匹配所有文件,然后在可用的数组结构中进行尽可能多的处理。
-
我会将您的 \s 更新为 \s* (0 或更多)它完全有效的 css 以这种方式( font-family:"Verdana", font-family: "Verdana"
-
@jeroen 我完全忘记了!我习惯了 Java 的“StartsWith()”函数,它只返回 true 或 false,即使函数名告诉我它会返回一个数字,但我没想到它可以返回 0。谢谢指出这一点!