0

我有一个变量:

.fontSize10{
font-size:xx-small;
}
.fontSize11{
font-size:x-small;
}
.fontSize12{
font-size:small;
}
.fontSize13{
font-size:medium;
}
.fontSize14{
font-size:large;
}
.fontSize16{
font-size:x-large;
}
.fontSize18{
font-size:xx-large;
}

在这个变量中,我可以有很多其他的 css 指令。

对于以 开头的每条指令,我需要检索.fontSize他的姓名(例如 .fontSize14)和他的尺寸(大)。

我需要将名称和大小放在一起(在数组中,例如 $tab[0][0] = "fontSize14" 和 $tab[0][1] = "large")

你有想法吗 ?也许用正则表达式?谢谢 :)

4

3 回答 3

3

如果它严格保持这种格式,你可以用这样的正则表达式来做到这一点:

=\.(fontSize\d+)\s*\{\s*font-size:([^;]+);\s*\}=is

但是,我建议您编写一个适当的解析器,以便您可以处理错误或不同的格式。这意味着您逐行遍历字符串并将当前定义块的名称存储在变量中。如果遇到 a font-size:,您可以使用当前块的名称将找到的值添加到数组中。当您遇到右括号时,您只需将变量设置回 null。它将比正则表达式更健壮,因为它也适用于具有更多属性的 CSS 定义。

于 2013-01-30T09:55:10.207 回答
1

尝试将你的 CSS 构建为一个数组,然后搜索它,当你完成搜索后,对数组进行内爆(使用 'implode()')。

数组结构示例:

$css = array('.fontSize10' => 'xx-small', '.fontSize11' => 'x-small');

如果您真的想继续使用 $css 作为字符串,那么正则表达式就是要走的路。

看看以下内容:

于 2013-01-30T09:54:28.817 回答
0

也许你做了一个包含一些爆炸的循环:

$result = array();
$parts1 = explode('}', $css);
foreach($parts1 as $part){
    if(strpos($part, '.fontSize') === 0){
        $subparts = explode('{', $part);
        $name = $subparts[0];
        //continue here to parse out the correct css value, maybe split again at ; and again at :
        //you then can pick out the parts you need and store it in $value or whatever.
        $result[] = array('name' => $name, 'value' => $value);
    }
}
于 2013-01-30T10:03:30.680 回答