You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用preg_replace()替换CSS文件中的指定样式内容?

现有代码的问题
  • 正则里的\b在双引号字符串中会被PHP解析为退格符,无法起到单词边界的作用,导致匹配不到primaryColour开头的目标内容。
  • 正则字符集仅包含小写字母[a-z0-9...],但目标颜色值#AD9DF4是大写字母格式,直接匹配失败。
  • 文件读写操作放在内层循环,每次遍历样式设置都会重复读写同一个文件,浪费IO资源。
修正后的实现代码
$settings['new_primary_colour_ccs'] = '#777777'; // 目标替换颜色

foreach($appPats as $path){
    // 仅读取一次文件内容
    $content = file_get_contents($path);
    
    $styleSettings = [
        'primary_colour' => [
            // 用单引号包裹正则避免转义问题,补充大写字母和#以覆盖颜色值字符
            'reg' => '/\bprimaryColour:\s?[\'"]([a-fA-F0-9# ,._+;()@!?&#:\/-]+)[\'"]/',
            'string' => 'primaryColour: "' . $settings['new_primary_colour_ccs'] . '"'
        ]
    ];

    foreach ($styleSettings as $style) {
        $content = preg_replace($style['reg'], $style['string'], $content);
    }
    
    // 仅写入一次修改后的内容
    file_put_contents($path, $content);
    var_dump($content);
}
核心调整说明
  1. 正则修复:用单引号包裹正则表达式,确保\b正常作为单词边界生效;字符集加入A-F和#,覆盖十六进制颜色值的所有可能字符,不管原颜色是大写还是小写都能匹配。
  2. IO优化:将文件读写操作移到外层循环,避免重复读写同一个文件,提升执行效率。
  3. 匹配精准度:正则能准确匹配primaryColour:后带单/双引号的任意合法颜色值,替换后保持原有的双引号格式。

针对你提供的目标文本片段,修正后的代码会精准定位到primaryColour:"#AD9DF4",并替换为primaryColour:"#777777",完全满足替换需求。

内容的提问来源于stack exchange,提问作者Alex Kizyma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 03:35:42