C# 在c中,获取类的所有属性和变量名称的正则表达式是什么?
什么是正则表达式来获取c中任何类的所有属性和变量名称,我想解析*.cs文件。也就是说,我想选择任何*.cs文件作为输入,它应该获得所选类的属性名作为输出 有人能帮忙吗!!!。。。。非常感谢您的帮助,我尝试了很多次,但每次出现类名而不是属性时都没有得到实际结果。 谢谢C# 在c中,获取类的所有属性和变量名称的正则表达式是什么?,c#,.net,regex,C#,.net,Regex,什么是正则表达式来获取c中任何类的所有属性和变量名称,我想解析*.cs文件。也就是说,我想选择任何*.cs文件作为输入,它应该获得所选类的属性名作为输出 有人能帮忙吗!!!。。。。非常感谢您的帮助,我尝试了很多次,但每次出现类名而不是属性时都没有得到实际结果。 谢谢 Jack你不可能用正则表达式得到你想要的东西,因为你需要的是语义上下文,而不仅仅是字符串解析 例如,在C文件中查找所有字段和属性定义的第一次尝试可能是这样的 ^\s*(?:(?:private|public|protected|in
Jack你不可能用正则表达式得到你想要的东西,因为你需要的是语义上下文,而不仅仅是字符串解析 例如,在C文件中查找所有字段和属性定义的第一次尝试可能是这样的
^\s*(?:(?:private|public|protected|internal)\s+)?(?:static\s+)?(?:readonly\s+)?(\w+)\s+(\w+)\s*[^(]
这将匹配属性public int Foo{…}和字段private int Foo;但没有方法保护空栏
问题是正则表达式引擎没有这些标记出现的上下文的概念。它将匹配此代码中的foo和bar:
int foo;
void Stuff()
{
int bar;
}
如果您碰巧知道您的代码文件遵循一些编码标准,那么您可能会更幸运。例如,如果强制所有类成员都必须具有访问说明符的样式规则,则可以使该正则表达式的private/public/etc部分成为非可选的;由于这些仅在类级别允许,因此它将过滤掉局部变量
还有其他选择,乍一看都不太吸引人。C开发团队一直在谈论在未来的.NET版本中将C编译器作为服务公开,这在这里是完美的,但我不希望很快出现这种情况。您可以购买第三方C解析器/分析器,如caveat:我对此没有任何经验,这只是谷歌的第一次成功。您可以尝试使用csc编译.cs文件并检查IL,但您需要了解所有第三方引用。您无法使用正则表达式获得所需的内容,因为您需要的是语义上下文,而不仅仅是字符串解析 例如,在C文件中查找所有字段和属性定义的第一次尝试可能是这样的
^\s*(?:(?:private|public|protected|internal)\s+)?(?:static\s+)?(?:readonly\s+)?(\w+)\s+(\w+)\s*[^(]
这将匹配属性public int Foo{…}和字段private int Foo;但没有方法保护空栏
问题是正则表达式引擎没有这些标记出现的上下文的概念。它将匹配此代码中的foo和bar:
int foo;
void Stuff()
{
int bar;
}
如果您碰巧知道您的代码文件遵循一些编码标准,那么您可能会更幸运。例如,如果强制所有类成员都必须具有访问说明符的样式规则,则可以使该正则表达式的private/public/etc部分成为非可选的;由于这些仅在类级别允许,因此它将过滤掉局部变量
还有其他选择,乍一看都不太吸引人。C开发团队一直在谈论在未来的.NET版本中将C编译器作为服务公开,这在这里是完美的,但我不希望很快出现这种情况。您可以购买第三方C解析器/分析器,如caveat:我对此没有任何经验,这只是谷歌的第一次成功。您可以尝试使用csc编译.cs文件并检查IL,但您需要了解所有第三方引用。请提供更多信息。为什么需要正则表达式?运行时是否需要这些数据?如何知道.cs文件只有一个类?或者有什么?嵌套类呢?重复的?@多项式:这不是重复的。您链接的问题是如何在一行中获取所有定义。这是问如何获取一个类中的所有字段名。你不能用一个正则表达式来实现这一点。您需要一个解析器。请提供更多信息。为什么需要正则表达式?运行时是否需要这些数据?如何知道.cs文件只有一个类?或者有什么?嵌套类呢?重复的?@多项式:这不是重复的。您链接的问题是如何在一行中获取所有定义。这是问如何获取一个类中的所有字段名。你不能用一个正则表达式来实现这一点。你需要一个解析器。我认为Mono编译器也可以用于此。我认为Mono编译器也可以用于此。