gpt4 book ai didi

php - 使用 PHP Regex 编辑 CSS 文件

转载 作者:太空宇宙 更新时间:2023-11-04 04:12:37 25 4
gpt4 key购买 nike

我需要编辑我的 css“字符串”并在每个选择器之前添加#holder 选择器。例如;

我想改变这个css字符串;

/* the css file with comments */ 
.header ul, .footer #div, .selector3 a
{
box-shadow: none;
-webkit-box-shadow: none;
-moz-box-shadow: none;
}

.selector4, .selector5 ul > li, .selector6 a:hover
{
text-shadow: 0 0 0 1px rgba(0, 0, 0, 0.05) inset;
-moz-text-shadow: 0 0 0 1px rgba(0, 0, 0, 0.05) inset;
-webkit-text-shadow: 0 0 0 1px rgba(0, 0, 0, 0.05) inset;
}

作为

/* the css file with comments */ 
#holder .header ul, #holder .footer #div, #holder .selector3 a
{
box-shadow: none;
-webkit-box-shadow: none;
-moz-box-shadow: none;
}

#holder .selector4, #holder .selector5 ul > li, #holder .selector6 a:hover
{
text-shadow: 0 0 0 1px rgba(0, 0, 0, 0.05) inset;
-moz-text-shadow: 0 0 0 1px rgba(0, 0, 0, 0.05) inset;
-webkit-text-shadow: 0 0 0 1px rgba(0, 0, 0, 0.05) inset;
}

我已经使用这个正则表达式来缩小字符串并且它工作正常所以你可以忽略注释行。

preg_replace('@({)\s+|(\;)\s+|/\*.+?\*\/|\R@is', '$1$2 ', $css);

我正在寻找一种正则表达式方法来执行此操作,但也将不胜感激任何其他解决方案。提前致谢。

最佳答案

你可以这样做:

$pat = '~(?>/\*(?>[^*]++|\*(?!/))*+\*/|{[^}]*+})(*SKIP)(?!)|[^\s,{/][^,{/]++~';
$css = preg_replace($pat, '#holder $0', $css);

这个想法是为了避免在大括号内出现注释和内容,这样你就可以使用 [^\s,{/][^,{/]++ 轻松找到所有选择器。

为此,您将注释的子模式放在一个组中(即 /\*(?>[^*]++|\*(?!/))*+\*/ ) 和大括号内的内容(即 {[^}]*+}),然后强制模式失败并禁止在匹配的子字符串中回溯。

(*SKIP)(?!) 用于此目的。 (*SKIP) 如果子模式稍后会失败,则禁止在他左边的所有匹配内容中回溯。 (?!) 强制子模式失败(“不跟任何东西”总是错误的)。

关于php - 使用 PHP Regex 编辑 CSS 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20448547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com