douwen9540 2016-10-05 10:31
浏览 187
已采纳

php获取css文件中的所有类名

Let's say I have a css file as shown...

span {
    //whatever
}

.block {
    //whatever
}

.block, .something {
    //whatever
}

.more,
h1,
h2 {
    //whatever
}

I want to extract all class names and put it into an array, but I want to keep the structure, so the array will look like...

["span", ".block", ".block, .something", ".more, h1, h2"]

So there are four items.

This is my attempt...

$homepage = file_get_contents("style.css");

//remove everything between brackets (this works)
$pattern_one = '/(?<=\{)(.*?)(?=\})/s';

//this regex does not work properly
$pattern_two = "/\.([\w]*)\s*{/";

$stripped = preg_replace($pattern_one, '', $homepage);
$selectors = array();
$matches = preg_match_all($pattern_two, $stripped, $selectors);

what is the proper regex to use for pattern 2?

展开全部

  • 写回答

1条回答 默认 最新

  • douhua1760 2016-10-05 10:46
    关注

    Like this?

    <?php
    $css = "span {
        //whatever
    }
    
    .block {
        //whatever
    }
    
    .block, .something {
        //whatever
    }
    
    .more,
    h1,
    h2 {
        //whatever
    }";
    
    $rules = [];
    
    $css = str_replace("", "", $css); // get rid of new lines
    $css = str_replace("
    ", "", $css); // get rid of new lines
    
    // explode() on close curly braces
    // We should be left with stuff like:
    //   span{//whatever
    //   .block{//whatever
    $first = explode('}', $css);
    
    // If a } didn't exist then we probably don't have a valid CSS file
    if($first)
    {
        // Loop each item
        foreach($first as $v)
        {
            // explode() on the opening curly brace and the ZERO index should be the class declaration or w/e
            $second = explode('{', $v);
    
            // The final item in $first is going to be empty so we should ignore it
            if(isset($second[0]) && $second[0] !== '')
            {
                $rules[] = trim($second[0]);
            }
        }
    }
    
    // Enjoy the fruit of PHP's labor :-)
    print_r($rules);
    

    展开全部

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部