php - 如何使用 PHP 替换 CSS 样式?

标签 php css preg-replace preg-match-all

简短的问题:我有一个包含 CSS 的 $css 变量,我想在该变量中找到给定的样式(在我的例子中是“body”样式)并将其替换为自定义样式.

基本输入输出:

/* blablabla */
body {
    background-color:#d0e4fe;
    font-family: 'Afamily', sanas-serif;
}
span {
    padding: 5px
}
h1 {
    color:orange;
    text-align:center;
}
body {
    margin: 10px;
    padding: 5px;
}
p {
    font-family:"Times New Roman";
    font-size:20px;
}

我们调用 magicFunction():

echo magicFunction($css, 'font-color: pink; font-weight: bold;');

我们得到:

/* blablabla */
body {
    font-color: pink; font-weight: bold;
}
span {
    padding: 5px
}
h1 {
    color:orange;
    text-align:center;
}
p {
    font-family:"Times New Roman";
    font-size:20px;
}

怎么了?基本上我卡在这里了

$bodyPattern = '/body\s\{[.|\s]*/m';
$found = preg_match_all($bodyPattern, $css, $matches);

它只找到输出内容,如:

"body {
   '"

在行返回之后......什么都没有。

当然,一旦我有了正确的正则表达式模式,我就会使用 preg_replace。

我为什么要这样做:我想申请 CssToInlineStyle使用我的网站 CSS 构建新闻通讯,我只想更改正文样式以避免应用某些样式(如背景颜色)。编辑:提到这一点是为了让您知道“为什么”,请随时发表评论并发表您的观点,但请只考虑上述问题作为您应该回答的问题。

最佳答案

我相信你的正则表达式是这样的: body {(([a-zA-Z0-9:;#%\(\)\'\-])*\s*)*} - 你需要正确格式化它php中的多行。

您需要匹配除 {} 之外的每个字符,以确保您只捕获 body 样式而不是所有样式。

我还推荐使用 this site在尝试使用它之前测试正则表达式。我同意其他评论,我认为你的所作所为有点疯狂……但用诺曼贝茨的话来说,“我们有时都会有点疯狂”,我知道我有。希望这会有所帮助。

编辑:

<?php
    $css = "body { \n
        color:#899890;\n
        }";
    $pattern = '/body(\s){0,1}{(([a-zA-Z0-9:;#%\(\)\'\-])*\s*)*}/m';
    $found = preg_match_all($pattern, $css, $matches);

    print_r($matches);
?>

产生:

Array
(
    [0] => Array
        (
            [0] => body { 

        color:#899890;

        }
        )

    [1] => Array
        (
            [0] =>  
        )

    [2] => Array
        (
            [0] => 
        )

    [3] => Array
        (
            [0] => ;
        )

)

它似乎对我有用。

关于php - 如何使用 PHP 替换 CSS 样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12511249/

相关文章:

css - 特定区域的超链接

php - 使用带变量的 preg_replace 获取数据库记录

php - 如何使用 PHP PDO 检测不可用的数据库?

php - 是否有某种用于运行 PHP Web 应用程序的可移植服务器,例如 RoR 或 Django?

php - 如何使用 PHP 将文件 POST 到 REST 服务器而不将文件写入磁盘?

javascript - AJAX 不在服务器上传递变量(任何 AJAX)

css - 不幸的是,网站上的 HR 菜单没有响应

html - 我将如何使内容和图像响应

php - 如何替换 html 标签内的值?

php - 尝试替换 PHP 中的高度和宽度值