需要正则表达式来去除C/C#注释。

6
我需要一个C#正则表达式来删除/**/之间的所有内容,包括/**/。 因此,基本上是在给定文本中删除所有代码注释。

1
你真的不需要正则表达式来做那件事。 - Brian Driscoll
1
这并不是那么容易的。你的代码可能包含像“ This: /* boo */ is no comment”这样的字符串。 - Jens
1
或者注释评论:// 这里没有注释 /*, 接着是 WillBeRemoved(); /* 真正的注释 */。好吧,这不太常见,但你可以非常有创意地搞砸它。 - Kobi
3
C#不是一种“正则语言”,因此无法使用“正则表达式”正确地识别它。如果您想要正确地删除注释,则需要构建一个“词法分析器”。将文本分解为标记,并确定哪些标记是注释。 - Eric Lippert
2
@Eric - 尽管它们显然不是这项工作的正确工具,但.NET正则表达式并不仅限于识别正则语言(例如,请参见http://msdn.microsoft.com/en-us/library/bs2twtah.aspx#balancing_group_definition)。 - kvb
显示剩余3条评论
3个回答

6
应该是这样的:
var regex = new Regex("/\*((?!\*/).)*\*/", RegexOptions.Singleline);

regex.Replace(input, "");

2

请注意评论可以嵌套。如果评论可以像SQL一样嵌套,基本的正则表达式将如下所示:

/\*.*?\*/

接下来,您需要循环直到没有内容可剥离。

相比之下,如果注释以类似于C语言的第一个*/结束,则需要使用贪婪匹配和负向先行断言:

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

这对于多行注释不起作用。 - Geremia

0

我也需要忽略形式为

的行注释
// blablabla

所以,如果有人也需要这个,请通过添加最后部分|(//.*)来修改正则表达式,使其完整形式如下:
(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|(//.*)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接