php – 通过正则表达式解析CSS
发布时间:2020-12-13 13:46:15 所属栏目:PHP教程 来源:网络整理
导读:我正在创建一个CSS编辑器,并尝试创建一个可以从CSS文档获取数据的正则表达式.这个正则表达式有效,如果我有一个属性,但我无法使其适用于所有属性.我在 PHP中使用preg / perl语法. 正则表达式 (?selector[A-Za-z]+[s]*)[s]*{[s]*((?properties[A-Za-z0-9-_]
我正在创建一个CSS编辑器,并尝试创建一个可以从CSS文档获取数据的正则表达式.这个正则表达式有效,如果我有一个属性,但我无法使其适用于所有属性.我在
PHP中使用preg / perl语法.
正则表达式 (?<selector>[A-Za-z]+[s]*)[s]*{[s]*((?<properties>[A-Za-z0-9-_]+)[s]*:[s]*(?<values>[A-Za-z0-9#,]+);[s]*)*[s]*} 测试用例 body { background: #f00; font: 12px Arial; } 预期结果 Array( [0] => Array( [0] => body { background: #f00; font: 12px Arial; } [selector] => Array( [0] => body ) [1] => Array( [0] => body ) [2] => font: 12px Arial; [properties] => Array( [0] => font ) [3] => Array( [0] => font ) [values] => Array( [0] => 12px Arial [1] => background: #f00 ) [4] => Array( [0] => 12px Arial [1] => background: #f00 ) ) ) 真实结果 Array( [0] => Array ( [0] => body { background: #f00; font: 12px Arial; } [selector] => body [1] => body [2] => font: 12px Arial; [properties] => font [3] => font [values] => 12px Arial [4] => 12px Arial ) ) 提前感谢任何帮助 – 这一直令我困惑我所有的下午!
对于单个正则表达式来说,这似乎太复杂了.那么我相信,正确的程度,高级用户可以创建正确的正则表达式.但是,您需要一个更高级的用户进行调试.
相反,我建议使用正则表达式来拉出这些片段,然后分别对每个片段进行标记.例如., /([^{])s*{s*([^}]*?)s*}/ 然后你最终得到选择器和属性在不同的字段,然后把它们分开. (即使是选择器也是很有趣的解析.)请注意,即使这样会有痛苦,如果}可以出现在引号或某事.你可以再次将它从它中解脱出来,以避免这一点,但是在这里完全可以避免使用正则表达式,并且可以通过一次解析一个字段来处理它,也许通过使用递归下降解析器或者yacc / bison或随你. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |