Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 匹配CSS规则的正则表达式_Html_Css_Regex_Expression_Preg Match - Fatal编程技术网

Html 匹配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*

原始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**

基本上,我试图实现的是,编写一些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