从java文件中删除注释并维护文件结构

时间:2014-08-18 17:47:53

标签: java regex

我正在开发一个项目,要求我从java文件中删除注释。目前,我正在使用正则表达式

(?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/)|(?://.*)

我是从http://ostermiller.org/findcomment.html获得的。

正则表达式运行良好,但问题是我删除注释时需要保留文件结构。换句话说,如果我有一个3行块注释,我需要用3个空行替换它。这是必要的,以便代码保持与原始代码相同的行号。

如何用3个空白行替换3行块注释?

编辑: 我能够通过使用SableCC来解决我的问题。

2 个答案:

答案 0 :(得分:0)

我还没有完全怀疑正则表达式正在做什么,但是如果它与整个评论匹配,那么你可以获得匹配的评论,检查它包含多少换行符,然后将匹配替换为许多新行而不是用空字符串替换它。

答案 1 :(得分:0)

如果你在正则表达式上设置,你可以试试这个

~/(?:/.*?$|\*[^*]*\*/)~

<强> DEMO

这使用了两个不同的非捕获组

由于所有评论(单行和多行)都必须以/开头,而/是正则表达式的第一个字符。然后,评论可以包含其他*/.*?$。这是交替进入的地方。第一部分\*[^*]*\*处理单行注释,而第二部分*匹配多行注释。

如果您的多行评论的格式为前导<space>后跟/* mu * lti * line * comment */ ,请执行以下操作:

*

然后这个 DEMO 应该可以解决问题(我不认为一行可以用Java中的{{1}}开头,除非它在评论)。

不幸的是,如果没有按照上面那样格式化,我还没有找到合适的替换来保留行间距。