Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.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
C# 在c中,获取类的所有属性和变量名称的正则表达式是什么?_C#_.net_Regex - Fatal编程技术网

C# 在c中,获取类的所有属性和变量名称的正则表达式是什么?

C# 在c中,获取类的所有属性和变量名称的正则表达式是什么?,c#,.net,regex,C#,.net,Regex,什么是正则表达式来获取c中任何类的所有属性和变量名称,我想解析*.cs文件。也就是说,我想选择任何*.cs文件作为输入,它应该获得所选类的属性名作为输出 有人能帮忙吗!!!。。。。非常感谢您的帮助,我尝试了很多次,但每次出现类名而不是属性时都没有得到实际结果。 谢谢 Jack你不可能用正则表达式得到你想要的东西,因为你需要的是语义上下文,而不仅仅是字符串解析 例如,在C文件中查找所有字段和属性定义的第一次尝试可能是这样的 ^\s*(?:(?:private|public|protected|in

什么是正则表达式来获取c中任何类的所有属性和变量名称,我想解析*.cs文件。也就是说,我想选择任何*.cs文件作为输入,它应该获得所选类的属性名作为输出

有人能帮忙吗!!!。。。。非常感谢您的帮助,我尝试了很多次,但每次出现类名而不是属性时都没有得到实际结果。 谢谢
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编译器也可以用于此。