我想从文件中选择所有较少的代码。但我找不到正确的方法。
这是我目前的代码
$d = <<<EOT
.class {
width:100%;
height:100%;
background-image: url(images/fallback-gradient.png);
}
.id {
b:100%;
bc: url(images/fallback-gradient.png);
}
& when ( @main_container_top_option = true) {
.fast_menu_option {
.gpicon {
color: transparent;
}
}
}
EOT;
$pattern = '/.*\{(?s:.*?)\}$/mi';
$t = preg_match_all($pattern, $d, $out, PREG_PATTERN_ORDER);
foreach ($out[0] as $key) {
echo '<br><pre>'.$key."</pre>";
}
这就是结果:
.class {
width:100%;
height:100%;
background-image: url(images/fallback-gradient.png);
}
.id {
b:100%;
bc: url(images/fallback-gradient.png);
}
& when ( @main_container_top_option = true) {
.fast_menu_option {
.gpicon {
color: transparent;
}
前两个课程没问题,但最后一个课程不合适,因为他们缺少2个其他课程。
我该如何解决?
答案 0 :(得分:0)
看起来你想要匹配各个块,所以递归模式将返回平衡括号。正如问题评论中所述,当角色异常发生时,此方法可能会中断。我相信css解析器“在野外”,但我没有任何建议。
代码:(Demo)
if (preg_match_all('~.*\{((?R)|[^}])*}~', $d, $out)) {
echo implode("\n---\n",$out[0]);
}
输出:
.class {
width:100%;
height:100%;
background-image: url(images/fallback-gradient.png);
}
---
.id {
b:100%;
bc: url(images/fallback-gradient.png);
}
---
& when ( @main_container_top_option = true) {
.fast_menu_option {
.gpicon {
color: transparent;
}
}
}
如果您不需要分隔块,可以像这样修改模式:
~[^{]*\{((?R)|[^}])*}~
但这取决于你的实际输入。