加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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或随你.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读