【问题标题】:PHP - Parse, Regex CSS file?PHP - 解析,正则表达式 CSS 文件?
【发布时间】:2014-05-17 04:27:57
【问题描述】:

我正在寻找实现这一目标的方法。

#header { background: red; font-size: 14px; color:white; }

我希望能够将这个(以及同一个文件中的更多)解析/正则表达式成一个看起来像这样的数组。

Array[0] = header
Array[0][0] = background: red;
Array[0][1] = font-size; 14px;
Array[0][2] = color: white;

接下来例如 #content 将是

Array[1] = content 
Array[1][0] = width: 1200px;

我已经尝试谷歌几个小时了,我完全迷失在正则表达式和多维数组的丛林中。

有人知道如何实现吗?

【问题讨论】:

  • 查看this answer,因为我相信那里的答案适合您的问题。
  • 您好,谢谢您的回答。我以前看过那个帖子,但我真的无法理解它。正则表达式对我来说非常难以掌握。这就是为什么如果有人在这里可以帮助我举个例子,并希望能深入了解它的工作原理和工作原理,那就太好了!我想学习! :)
  • 你需要两个正则表达式来完成这样的任务。链接的答案提供了一个可行的正则表达式来拆分 CSS 声明部分。您仍然需要将各个定义分开(不过就像(?=;) 一样简单)。如果您详细说明您的最后一次尝试,我们可能会有所帮助。否则这个问题太宽泛了(对于一个大部分已解决的问题)。
  • @user3151165:还有一个解析器类,不仅仅是正则表达式。
  • @mario 好的,如果我这样重新表述自己的话。我需要阅读什么才能将此字符串“#header { background: red; font-size: 14px; color:white; }” 拆分为我选择的变量。就像首先我想把它拆分成 #til } 之间的所有循环,通过洞文件找到所有“类”。然后我想得到第一个包含#WORD的单词,例如等等等等......然后把它全部放入一个数组中?

标签: php css arrays regex parsing


【解决方案1】:

this question 为基础(由@skrilled 在 cmets 中发布)我举了一个例子来说明如何使用正则表达式解析 css。

我们可以通过对字符串进行两步匹配来完成此操作。

1) 首先,我们检索字符串中的类(或 id 名称)和属性的抽象(我的意思是,一个字符串中的所有属性)This regex 很好地完成了任务:([#\.][a-z0-9]*?\.?.*?)\s?\{([^\{\}]*)\}

2) 有了属性字符串,我们现在可以使用正则表达式来解析它并创建一个新数组。使用this simple regex,我们可以检索到第二部分:([^\;]*);

在代码中是这样的:

function parseCss($cssString){
    //Parsing the class or id name + the attributes
    $regex = "/([#\.][a-z0-9]*?\.?.*?)\s?\{([^\{\}]*)\}/m";
    preg_match_all($regex, $cssString, $classes, PREG_PATTERN_ORDER);

    if(sizeof($classes[1]) > 0){
        //organize a new proper array "$parsedCss"
        foreach($classes[1] as $index => $value){
            $parsedCss[$index][0] = $value; //class or id name
        }

        foreach($classes[2] as $index => $value){  
            //Parsing the attributes string
            $regex = "/([^\;]*);/m";
            preg_match_all($regex, $value, $returned_attributes, PREG_PATTERN_ORDER);

            if(sizeof($returned_attributes[1]) > 0){
                $parsedCss[$index][1] = $returned_attributes[1]; // array of attributes
            }
        }
    }
    return $parsedCss;
}

然后你就可以打印了:

echo '<pre>';
$css = "#header { background: red; font-size: 14px; color:white; }#header { background: red; font-size: 14px; color:white; }";
print_r(parseCss($css));

结果是:

Array
(
    [0] => Array
        (
            [0] => #header
            [1] => Array
                (
                    [0] =>  background: red
                    [1] =>  font-size: 14px
                    [2] =>  color:white
                )

        )

    [1] => Array
        (
            [0] => #header
            [1] => Array
                (
                    [0] =>  background: red
                    [1] =>  font-size: 14px
                    [2] =>  color:white
                )

        )

)

【讨论】:

  • 谢谢!正是我需要的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-19
  • 2010-12-09
  • 1970-01-01
  • 1970-01-01
  • 2016-09-24
  • 2012-06-25
  • 2014-05-16
相关资源
最近更新 更多