PHP 正则表达式:删除 CSS 规则,除非包含特定字符串
PHP RegEx: Remove CSS rules, except if contain specific string
我正在努力匹配并保留所有包含字符串 224,13,78
.
的 CSS 规则
示例输入:
h1 {
color: rgb(224,13,78);
}
h1 {
display: block; /* Delete this whole block */
}
#test-color {
color: rgb(224,13,78);
}
.test-position {
position: absolute; /* Delete this whole block */
}
.test-bg-color {
background-color: rgba(224,13,78,0.5);
}
@media ( max-width: 1200px ) {
.test-color {
color: rgb(224,13,78);
}
.test-position {
overflow: hidden; /* Delete this whole block */
}
}
期望的输出:
h1 {
color: rgb(224,13,78);
}
#test-color {
color: rgb(224,13,78);
}
.test-bg-color {
background-color: rgba(224,13,78,0.5);
}
@media ( max-width: 1200px ) {
.test-color {
color: rgb(224,13,78);
}
}
有没有方便的正则表达式可以解决我的问题?
作为参考,我找到了这个解决方案,但它匹配 属性 名称,而不是值:
查找:\{.*(font-size\:\s*\d+px\;).*\}?
替换:\{ \}
还有这个 JavaScript 解决方案也是如此:
What is RegEx to remove css keeping font size
我也接受 JavaScript 解决方案,但 PHP 更可取。
提前谢谢大家。
试试下面的正则表达式:
\h*+[^\s{}][^{}]*{(?:[^{}](224,13,78)?)++[^{}]*+}(?(1)(*SKIP)(*F))\R*
它的作用是尝试匹配 {...}
块中的字符序列 224,13,78
。如果匹配,它会保存第一个捕获组中的值。然后稍后我们说如果第一个捕获组匹配成功,则跳过匹配的任何内容:
(?(1)(*SKIP)(*F))
否则整个匹配项不包含所需的字符,引擎将不会跳过它。我们现在只需要将匹配的块替换为空:
$css = preg_replace('~\h*+[^\s{}][^{}]*{(?:[^{}](224,13,78)?)++[^{}]*+}(?(1)(*SKIP)(*F))\R*~', '', $css);
我正在努力匹配并保留所有包含字符串 224,13,78
.
示例输入:
h1 {
color: rgb(224,13,78);
}
h1 {
display: block; /* Delete this whole block */
}
#test-color {
color: rgb(224,13,78);
}
.test-position {
position: absolute; /* Delete this whole block */
}
.test-bg-color {
background-color: rgba(224,13,78,0.5);
}
@media ( max-width: 1200px ) {
.test-color {
color: rgb(224,13,78);
}
.test-position {
overflow: hidden; /* Delete this whole block */
}
}
期望的输出:
h1 {
color: rgb(224,13,78);
}
#test-color {
color: rgb(224,13,78);
}
.test-bg-color {
background-color: rgba(224,13,78,0.5);
}
@media ( max-width: 1200px ) {
.test-color {
color: rgb(224,13,78);
}
}
有没有方便的正则表达式可以解决我的问题?
作为参考,我找到了这个解决方案,但它匹配 属性 名称,而不是值:
查找:\{.*(font-size\:\s*\d+px\;).*\}?
替换:\{ \}
还有这个 JavaScript 解决方案也是如此:
What is RegEx to remove css keeping font size
我也接受 JavaScript 解决方案,但 PHP 更可取。
提前谢谢大家。
试试下面的正则表达式:
\h*+[^\s{}][^{}]*{(?:[^{}](224,13,78)?)++[^{}]*+}(?(1)(*SKIP)(*F))\R*
它的作用是尝试匹配 {...}
块中的字符序列 224,13,78
。如果匹配,它会保存第一个捕获组中的值。然后稍后我们说如果第一个捕获组匹配成功,则跳过匹配的任何内容:
(?(1)(*SKIP)(*F))
否则整个匹配项不包含所需的字符,引擎将不会跳过它。我们现在只需要将匹配的块替换为空:
$css = preg_replace('~\h*+[^\s{}][^{}]*{(?:[^{}](224,13,78)?)++[^{}]*+}(?(1)(*SKIP)(*F))\R*~', '', $css);