删除C/C#注释所需的正则表达式

删除C/C#注释所需的正则表达式,c#,regex,C#,Regex,我需要一个C正则表达式来删除/*和*/之间的所有内容,包括/**/。 因此,基本上删除给定文本中的所有代码注释。应该是这样的: var regex = new Regex("/\*((?!\*/).)*\*/", RegexOptions.Singleline); regex.Replace(input, ""); /\*.*?\*/ 注意注释可能是嵌套的。如果注释可以像SQL中那样嵌套,则基本正则表达式如下所示: var regex = new Regex("/\*((?!\*/).)*

我需要一个C正则表达式来删除
/*
*/
之间的所有内容,包括
/**/

因此,基本上删除给定文本中的所有代码注释。

应该是这样的:

var regex = new Regex("/\*((?!\*/).)*\*/", RegexOptions.Singleline);

regex.Replace(input, "");
/\*.*?\*/

注意注释可能是嵌套的。如果注释可以像SQL中那样嵌套,则基本正则表达式如下所示:

var regex = new Regex("/\*((?!\*/).)*\*/", RegexOptions.Singleline);

regex.Replace(input, "");
/\*.*?\*/
然后你需要循环直到你什么都没剥

相反,如果注释以第一个*/结尾,就像在C中一样,则需要它具有负前瞻性:

/\*((?!\*/).)*\*/

我还需要忽略表单中的行注释

// blablabla
因此,如果有人也需要它,可以通过添加最后一部分|(//.*)来修改正则表达式,这样完整的表单将是:

(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|(//.*)

你真的不需要一个正则表达式。那不是那么容易。您的代码可能包含类似“This://boo*/无注释”的字符串。或注释:
//此处无注释//*
,后跟
WillBeRemoved();//*实际注释*/
。好的,不太常见,但把它弄乱会很有创意。C#不是一种正则语言,所以用正则表达式无法正确识别它。如果您想正确地删除注释,那么您必须构建一个lexer。将文本拆分为标记,并确定哪些标记是注释。@Eric-尽管它们肯定不是此作业的合适工具,.NET正则表达式不限于识别正则语言(例如,请参阅)。