2014-10-09 22 views
1

具有CSS的片段:定期对解析出的CSS规则表达框

.__chat.__32x32 { 
    color: white; 
    background: url({ANYNAME:anyName}Images/icons/32x32/chat.png{ANYNAME}) no-repeat; 
} 

问题:需要解析出的CSS(选择+规则块)的块。 Bu在我的模式中考虑URL中的大括号作为规则块的关闭。所有这方面的尝试都没有给我带来成功。 问题:如果模式考虑将构造{anyname}作为匹配字符串的一部分,如果它位于url:rule或rules块内?

var parser = new Regex(@"([a-z0-9\s,*\""\[\]=\.\:#_\[email protected]]+){((?>[^}]+|(?:(?<={ROOT)|(?<={VERSION))})*)}|(\/\*(?:(?:(?!\*\/)[\S\s])+)\*\/)", RegexOptions.Multiline | RegexOptions.IgnoreCase); 
      MatchCollection matches; 

      matches = parser.Matches(fullContent); 

      foreach (Match match in matches) 
      { 
       if (match.Value.IndexOf("/*") > -1) 
       { 
        var cssComment = new CssComment(match.Value); 
        _cssElements.Add(cssComment); 
       } 
       else 
       { 
        var cssBlock = new CssBlock(match.Groups[1].Value.Trim(), match.Groups[2].Value.Trim()); 
        _cssElements.Add(cssBlock); 
       } 
      } 
+0

可能的重复[正则表达式来获取大括号之间的字符串“{我想要花括号之间的大括号}”](http://stackoverflow.com/questions/413071/regex-to-get-string-between-curly -braces-i-want-what-the-curly-brace) – Jeredepp 2014-10-09 08:07:02

+0

你使用什么语言/工具?你有一个嵌套的结构。您将需要平衡组(.net)或递归正则表达式(pcre/perl)。此外,至少要显示你已经尝试过... – HamZa 2014-10-09 08:29:04

+0

C#和用于测试模式http://regex101.com/r/tU2zB3/1 – setty 2014-10-09 08:31:53

回答

0

请试试这个:

[.#]?[\w\s.<>]+{(\n.*)+?(?=\n}\n)\n} 

它整个街区(选择+内码)相匹配。您可能需要在选择器部分[.#]?[\w\s.<>]中进行一些更改以使其适用于您的问题。