Html 匹配CSS规则的正则表达式
原始CSS示例:Html 匹配CSS规则的正则表达式,html,css,regex,expression,preg-match,Html,Css,Regex,Expression,Preg Match,原始CSS示例: .sk-hybrid{} .sk-hybrid header > .row, .sk-hybrid > #content.row, .sk-hybrid footer > .row{} .sk-border-radius-sm{} .sk-gradient-gray-sm{} 我想用preg_替换.sk whater{to.sk-whater-I{的所有实例,以及后跟空格的相同术语的所有实例,例如**.sk whater**to**.sk-whater-I*
.sk-hybrid{}
.sk-hybrid header > .row,
.sk-hybrid > #content.row,
.sk-hybrid footer > .row{}
.sk-border-radius-sm{}
.sk-gradient-gray-sm{}
我想用preg_替换.sk whater{to.sk-whater-I{的所有实例,以及后跟空格的相同术语的所有实例,例如**.sk whater**to**.sk-whater-I**
基本上,我试图实现的是,编写一些PHP代码来解析我的CSS文件,将-I添加到我的.sk someword类的所有实例中。这样我就可以将!重要声明附加到规则集,但这很简单
我只需要regX来添加-I。请注意.sk之间可能有特殊字符
.sk-some-class-term(space)
或
说到regX,我真是个懒虫。我很确定其他人写这篇文章很容易。我不能。请帮忙
我的示例CSS的结果应该是:
.sk-hybrid-i{}
.sk-hybrid-i header > .row,
.sk-hybrid-i > #content.row,
.sk-hybrid-i footer > .row{}
.sk-border-radius-sm-i{}
.sk-gradient-gray-sm-i{}
匹配
并替换为$1-i:
但是,最好使用专用工具,该工具与正则表达式不同,能够理解底层语言。对于php,请注意示例—它几乎就是您要寻找的工具。此正则表达式应适用于您的目的:
^(\.sk-\w+(?:[^\{\s,>]+))
解释
^匹配字符串的开头
开始捕获组
\.sk-\w+匹配.sk-后跟字母或数字
?:开始非捕获组
[^\{\s,>]+匹配任何非空白、非{、非-、或非->字符
结束非捕获组
末端捕获组
PHP来完成您所要求的$cssString设置到css的位置
$cssString = preg_replace ( '(\.sk-\w+(?:[^\{\s,>]+))', '$1-i', $cssString);
不过,如果您在linux上运行,只需使用sed即可
sed 's/^(\.sk-\w+(?:[^\{\s,>]+))/$0-i/g' example.css
!在CSS中非常不鼓励使用important。作为最终结果,您希望实现什么?我打算这样做,以便在向元素添加class.sk border radius时,可以避免我键入所有webkit内容。这很乏味。但有时CSS继承的特殊性会阻止我这样做。这就是我向我们介绍的地方e.sk-border-radius-i,因为我知道这是我的类的一个版本,具有!重要声明。但是,我不会手动重写我经常更新的通用样式表。因此PHP解析。嗯,你的解决方案比我的更优雅。谢谢!非常有魅力。必须使用“$0-i”才能使它工作。我不知道我不知道它是怎么回事,我只是从另一个线程读到的,但是preg_replace代码工作得很好。干杯,伙计!更新了代码,对我来说似乎很奇怪,它是$0,但如果它工作的话,那就好了:
$cssString = preg_replace ( '(\.sk-\w+(?:[^\{\s,>]+))', '$1-i', $cssString);
sed 's/^(\.sk-\w+(?:[^\{\s,>]+))/$0-i/g' example.css