在[C#]中,不知道各位大大有没有现成的正则表达式,来判断每行代码有无注释。谢谢咯!

解决方案 »

  1.   

    开始我觉得挺简单的,后来感觉情况越来越多:1:  //using...
    2:  using... ; /*abc*/
    3:  using... ; /*abc*/ using ....
    4:  string str = @"/*" ; /*abc*/
    4:  string str1 = @"/*xxxx" ; /*abc*/ string str2 = @"/*xxxx*/" ;还有很多很多
      

  2.   

    也就是说在一行里面匹配是吧?考虑//和<**>两种注释是吧?刚刚考虑了一下,有点麻烦......
      

  3.   

    首先要解决字符串的问题...我用过这样一个匹配字符串(支持\"转义)...看起来好像行...贴出来看看有没有帮助...(?<!\\)"(?<string>(?:[^"]+|[^"]+\\"[^"]+|\\"[^"]+))(?<!\\)"
      

  4.   

    谢谢chaircat ,不过现在还是不可以。。
      

  5.   

    只判断有没有注释吗?
    那好像又容易一丁点...想ing...
      

  6.   

    真的比较麻烦,我考虑了几个小时,先写了个针对//的,我测试基本通过,你测试一下:^[^"]*((((?<=@)"[^"]*")|((?<!@)"(\\\\|\\"|[^"])*"))[^"]*)*//Regex reg = new Regex("^[^\"]*((((?<=@)\"[^\"]*\")|((?<!@)\"(\\\\\\\\|\\\\\"|[^\"])*\"))[^\"]*)*//",RegexOptions.ExplicitCapture);
    bool hasComment = reg.IsMatch("一行源代码");   //返回true表示有注释-----------你可以直接用以下代码进行测试,文件位置:E:/abc.cs------------ArrayList hasList = new ArrayList();   //存储有注释的行
    FileStream file = new FileStream(@"E:/abc.cs",FileMode.Open);
    StreamReader reader = new StreamReader(file,System.Text.Encoding.GetEncoding("gb2312"));
    ArrayList list = new ArrayList();
    while (true)
    {
        string str = reader.ReadLine();
        if (str == null || str == "")   break;
        list.Add(str);
    }
    reader.Close();
    file.Close();Regex reg = new Regex("^[^\"]*((((?<=@)\"[^\"]*\")|((?<!@)\"(\\\\\\\\|\\\\\"|[^\"])*\"))[^\"]*)*//",RegexOptions.ExplicitCapture);
    foreach (object obj in list)
    {
        bool hasComment = reg.IsMatch((string)obj);
        if (hasComment)
        {
            hasList.Add(obj);
        }
    }
    return;//这里设个断点观察hasList里面的值
      

  7.   

    表达式:
    (?:(?:(?!/\*|"|//).)+|(?:(//.*$)|(/\*.*?\*/)|"(?:[^\\"]|\\.)*"))+测试页面:(推荐)
    http://www.regexlab.com/zh/workshop.asp?pat=%28%3F%3A%28%3F%3A%28%3F%21/%5C*%7C%22%7C//%29.%29%2B%7C%28%3F%3A%28//.*%24%29%7C%28/%5C*.*%3F%5C*/%29%7C%22%28%3F%3A%5B%5E%5C%5C%22%5D%7C%5C%5C.%29*%22%29%29%2B&txt=string%20str%20%3D%20@%22/*%22%20%3B%20/*abc*/&dlt=0判断方法:
    这个表达式能够匹配整行,如果 捕获组1(group $1)有内容,则表示有 //... 注释。如果 捕获组2(group $2)有内容,则表示有 /* ... */ 注释
      

  8.   

    楼上的,非常不错!!!不过没有考虑@的情况,你用这句测试一下试试:string str0 = @"abc\";//"
      

  9.   

    根据 www_123du_com(鼠·神·泪) 兄 的指点,表达式改为:
    (?:(?:(?!/\*|"|//|@(?=")).)+|(?:(//.*$)|(/\*.*?\*/)|"(?:[^\\"]|\\.)*"|@"(?:[^"]|"")*"))+测试页面:
    http://www.regexlab.com/zh/workshop.asp?pat=%28%3F%3A%28%3F%3A%28%3F%21/%5C*%7C%22%7C//%7C@%28%3F%3D%22%29%29.%29%2B%7C%28%3F%3A%28//.*%24%29%7C%28/%5C*.*%3F%5C*/%29%7C%22%28%3F%3A%5B%5E%5C%5C%22%5D%7C%5C%5C.%29*%22%7C@%22%28%3F%3A%5B%5E%22%5D%7C%22%22%29*%22%29%29%2B&txt=string%20str0%20%3D%20@%22abc%5C%22%3B//%22&dlt=0判断方法仍然是:
    这个表达式能够匹配整行,如果 捕获组1(group $1)有内容,则表示有 //... 注释。如果 捕获组2(group $2)有内容,则表示有 /* ... */ 注释