求识别C#变量定义的正则表达式,该如何解决
求识别C#变量定义的正则表达式
例如:
求一正则表达式算法,搜索上述代码,识别出变量的定义语句,并返回结果:
变量名:functionRun1 类型:Expression.FunctionRun
……
变量名:UserMxDoc 类型:System.Xml.XmlDocument
……
------解决方案--------------------
例如:
- C# code
//以下代码属于变量的定义语句 private Expression.FunctionRun functionRun1; public System.Xml.XmlDocument SubUserMxXml; public int MyYearD=0; public int[] MyInt; public int MyMonthD=0; public string MyUnitD=""; public string GetBbName=""; System.Xml.XmlDocument UserMxDoc=New System.Xml.XmlDocument(); //以下代码不是变量的定义语句 InitializeComponent(); SubMxXml=New System.Xml.XmlDocument()
求一正则表达式算法,搜索上述代码,识别出变量的定义语句,并返回结果:
变量名:functionRun1 类型:Expression.FunctionRun
……
变量名:UserMxDoc 类型:System.Xml.XmlDocument
……
------解决方案--------------------
- C# code
string str = @"private Expression.FunctionRun functionRun1;"; string patternstr = @"(private|public)\s*(?<str1>.*?)\s*(?<str2>\w+)(;|\s*=)"; MatchCollection mc = Regex.Matches(str, patternstr); for (int i = 0; i < mc.Count; i++) { Response.Write(mc[i].Groups["str1"].Value + ":" + mc[i].Groups["str2"].Value); }
------解决方案--------------------
- C# code
Regex re = new Regex(@"([\w.\]\[]+)\s+(\w+)(?:;|\s*=)");
------解决方案--------------------
可以试试看用CSharpCodeProvider.Parse(源代码流)来得到一个CodeCompileUnit。
从CodeCompileUnit可以拿到所有的CodeMemberField,
然后它的类型,名字,甚至注释就都有了。
------解决方案--------------------
- C# code
bool IsDef(string codeTxt) { string patternstr = @"^\w+(\.\w+)*\s+\w+\s*(;|=)"; return Regex.Match(codeTxt, patternstr).Success; }
------解决方案--------------------
- C# code
bool IsDef(string codeTxt) { string patternstr = @"^\s*\w+(\.\w+)*\s+\w+\s*(,|;|=)"; return Regex.IsMatch(codeTxt, patternstr); }
------解决方案--------------------
- C# code
bool IsFunction(string CodeTxt) { return Regex.IsMatch(CodeTxt,@"[^=]*\w+(\.\w+)*\s+\w+\s*\("); }