C# 正则表达式是否仅从CSS文件中提取选择器?

C# 正则表达式是否仅从CSS文件中提取选择器?,c#,css,regex,css-selectors,C#,Css,Regex,Css Selectors,我试图找到一个正则表达式,它可以让我从CSS文件中提取规则。我不需要任何样式声明,只需要规则(选择器)。下面是我正在使用的CSS文件示例: body, p, table, td, th, br, div, span { /* Some styles here */ } /* This is a test */ h1 { /* Some styles here */ } a:hover { /* Some styles here */ } -moz-any(input

我试图找到一个正则表达式,它可以让我从CSS文件中提取规则。我不需要任何样式声明,只需要规则(选择器)。下面是我正在使用的CSS文件示例:

body, p, table, td, th, br, div, span {
    /* Some styles here */
}

/* This is a test */
h1 {
    /* Some styles here */
}

a:hover {
    /* Some styles here */
}

-moz-any(input[type="text"], input[type="radio"]) {
    /* Some styles here */
}
在本例中,我希望正则表达式匹配以下项:body、p、table、td、th、br、div、span、h1、a:hover、-moz-any(input[type=“text”]、input[type=“radio”])

下面是我对正则表达式的尝试。虽然它可以工作,但它包括/*这是一个test*/注释,还包括花括号。理想情况下,这些将被省略

(}{0,})([^}]*)({)
在此方面的任何帮助都将不胜感激。非常感谢


我还应该注意,我知道这不是一个很好的CSS文件。这只是我用来测试解析的测试文件。

这个粗糙的正则表达式将捕获子模式2中的选择器。因为它不是解析器,所以它也会在注释中捕获选择器

(\s|^)(.*?)\s*{

只要您始终将开头的squggley括号与声明放在同一行上,如您的示例所示:

(.+) {

我可以给你一些代码,告诉你如果你需要的话,如何获得群组。让我知道你用的是什么语言,我会尽力遵守

我无法使用RegEx获得解决方案,所以我听从了Qtax的建议,使用了一个带有CSS3语法的合适解析器

我把这个问题标为答案


@Qtax-如果您添加注释作为答案,我会将其标记为“正确”答案:)

要使用正则表达式执行此操作很复杂,最好使用适当的解析器。四件事:1)规则和选择器不是一回事。你只是在寻找选择器。2)
:-moz-any()
是一个伪类,因此它需要前面的
。3) 您用什么语言实现正则表达式?如果它是JavaScript正则表达式,那么您可以使用相关术语搜索该站点中存在的问题。4) 一旦你使用更复杂的样式表,你可能不会对正则表达式有太多的了解。我决不是CSS专家。我不知道-moz需要什么a:在它之前,哎呀。不管怎样,重点仍然是我想抓住这一点。另外,我正在用C#实现这个功能。Qtax-什么会使正则表达式如此复杂?我的正则表达式Foo非常糟糕:)我添加了相应的标记。有许多复杂的因素,但@rules(可能嵌套也可能不嵌套)通常是可疑的(例如媒体查询)。您需要解析所有CSS语言构造以获得正确的结果,如注释、引号等。这使得使用正则表达式对CSS进行完整解析。它可以用一个复杂的表达式(还有一些代码)来完成,但这就是解析器的用途。我确信CSS有C#解析器,因此不需要重新发明轮子,除非这只是一个练习。您定义了CSS3语法吗?您选择什么作为合适的解析器?