Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用PHP在CSS中搜索一些东西_Php_Css_Regex - Fatal编程技术网

用PHP在CSS中搜索一些东西

用PHP在CSS中搜索一些东西,php,css,regex,Php,Css,Regex,我把它放在一个变量中: .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; } 在这

我把它放在一个变量中:

.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”)


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

尝试将CSS构建为一个数组,然后在其中进行搜索,搜索完成后,对数组进行内爆(使用“内爆()

阵列结构的示例:

$css = array('.fontSize10' => 'xx-small', '.fontSize11' => 'x-small');
如果您真的想继续使用$css作为字符串,那么regex就是一个不错的选择

请看以下内容:

  • preg_match(),preg_match_all(),preg_replace()
  • 要测试正则表达式,请执行以下操作:

尝试将CSS构建为一个数组,然后在其中进行搜索,搜索完成后,对数组进行内爆(使用“内爆()”)

阵列结构的示例:

$css = array('.fontSize10' => 'xx-small', '.fontSize11' => 'x-small');
如果您真的想继续使用$css作为字符串,那么regex就是一个不错的选择

请看以下内容:

  • preg_match(),preg_match_all(),preg_replace()
  • 要测试正则表达式,请执行以下操作:

如果严格遵循此格式,可以使用如下正则表达式:

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

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

如果严格遵守此格式,您可以使用如下正则表达式:

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

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

也许您可以使用一些包含分解的循环:

$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);
    }
}

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

$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);
    }
}

.fontSize3.otherClass
怎么样?这将是一次任务吗?这个问题对我来说还不清楚…那么
.fontSize3.otherClass
呢?这将是一次任务吗?这个问题对我来说不太清楚…我试过了,效果很好。看一看。这个页面是德语的,但你应该明白其中的意思。使用“preg\u match\u all(“/=\(fontSize\d+)\s*\{\s*字体大小:([^;]+);\s*\}=is/ms“,$css,$size,preg\u PATTERN\u ORDER,0);”时,我的数组大小是空的……我试过了,效果不错。看一看。这个页面是德语的,但是你应该明白其中的意思。如果使用“preg\u match\u all(“/=\(fontSize\d+)\s*\{\s*字体大小:([^;]+);\s*\}=is/ms”,$css,$size,preg\u模式顺序,0);”,我的数组大小为空。。。