用正则表达式判断注释 在[C#]中,不知道各位大大有没有现成的正则表达式,来判断每行代码有无注释。谢谢咯! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 开始我觉得挺简单的,后来感觉情况越来越多:1: //using...2: using... ; /*abc*/3: using... ; /*abc*/ using ....4: string str = @"/*" ; /*abc*/4: string str1 = @"/*xxxx" ; /*abc*/ string str2 = @"/*xxxx*/" ;还有很多很多 也就是说在一行里面匹配是吧?考虑//和<**>两种注释是吧?刚刚考虑了一下,有点麻烦...... 首先要解决字符串的问题...我用过这样一个匹配字符串(支持\"转义)...看起来好像行...贴出来看看有没有帮助...(?<!\\)"(?<string>(?:[^"]+|[^"]+\\"[^"]+|\\"[^"]+))(?<!\\)" 谢谢chaircat ,不过现在还是不可以。。 只判断有没有注释吗?那好像又容易一丁点...想ing... 真的比较麻烦,我考虑了几个小时,先写了个针对//的,我测试基本通过,你测试一下:^[^"]*((((?<=@)"[^"]*")|((?<!@)"(\\\\|\\"|[^"])*"))[^"]*)*//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里面的值 表达式:(?:(?:(?!/\*|"|//).)+|(?:(//.*$)|(/\*.*?\*/)|"(?:[^\\"]|\\.)*"))+测试页面:(推荐)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)有内容,则表示有 /* ... */ 注释 楼上的,非常不错!!!不过没有考虑@的情况,你用这句测试一下试试:string str0 = @"abc\";//" 根据 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)有内容,则表示有 /* ... */ 注释 麻烦帮忙转换一下加密解密的函数 C#通过反射对可空类型动态赋值的问题 C# word操作相关 如何让webBrowser由编辑状态返回至阅读状态? c#.net怎么实现以下功能 正则表达式过滤html中的on***怎么写? 为什么 老报错呢 .NET 动态窗体 窗体设计器 组件 请问有没有办法设置下载网页 public byte[] DownloadData(string address) 的超时时间? 为什么在ORACLE10g里修改数据失败? 无法获得..程序集中的安装程序类型 vs2005中那个能使form所有控件变灰的控件叫什么名字呀?
2: using... ; /*abc*/
3: using... ; /*abc*/ using ....
4: string str = @"/*" ; /*abc*/
4: string str1 = @"/*xxxx" ; /*abc*/ string str2 = @"/*xxxx*/" ;还有很多很多
那好像又容易一丁点...想ing...
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里面的值
(?:(?:(?!/\*|"|//).)+|(?:(//.*$)|(/\*.*?\*/)|"(?:[^\\"]|\\.)*"))+测试页面:(推荐)
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)有内容,则表示有 /* ... */ 注释
(?:(?:(?!/\*|"|//|@(?=")).)+|(?:(//.*$)|(/\*.*?\*/)|"(?:[^\\"]|\\.)*"|@"(?:[^"]|"")*"))+测试页面:
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)有内容,则表示有 /* ... */ 注释