简短的问题:我有一个包含 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/