正则表达式以匹配CSS规则

时间:2014-09-23 15:33:49

标签: 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_replace .sk-whatever { .sk-whatever-i {的所有实例以及相同术语的所有实例后跟空格,例如**。sk-whatever ** to **。sk-whatever-i **

基本上我想要实现的是,编写一些PHP代码来解析我的CSS文件,将“-i”添加到我的 .sk-someword 类的所有实例中。所以我可以将!important声明附加到规则集中,但这很容易。

我只需要regX来添加“-i”。请注意.sk-之间可能有任何特殊字符。

.sk-some-class-term(space)

.sk-some-class-term{

对于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{}

3 个答案:

答案 0 :(得分:1)

匹配

(\.sk(-\w+)+)

并替换为$1-ihttp://regex101.com/r/nC8kU1/1

然而,更好的方法是使用专用工具,与正则表达式不同,它“理解”基础语言。对于php,有https://github.com/sabberworm/PHP-CSS-Parser,请注意Prepend id to selectors示例 - 它几乎就是您要找的内容。

答案 1 :(得分:1)

此正则表达式适用于您的目的:

^(\.sk-\w+(?:[^\{\s,>]+))

RegEx Demo

<强>解释

  • ^匹配字符串的开头
  • (开始捕获组
    • \.sk-\w+匹配.sk-后跟字母或数字
    • (?:开始非捕获组
      • [^\{\s,>]+匹配任何非空白,非{,非,或非>字符
    • )结束非捕获组
  • )结束捕获组

答案 2 :(得分:0)

PHP执行您要求{c}设置为{c}的地方。

$cssString

虽然如果你在linux上运行,只需使用sed

$cssString = preg_replace ( '(\.sk-\w+(?:[^\{\s,>]+))',  '$1-i', $cssString);