日期:2014-05-18  浏览次数:21196 次

求识别C#变量定义的正则表达式
例如:
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*\("); 
}