我正在开发一个项目,要求我从java文件中删除注释。目前,我正在使用正则表达式
(?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/)|(?://.*)
我是从http://ostermiller.org/findcomment.html获得的。
正则表达式运行良好,但问题是我删除注释时需要保留文件结构。换句话说,如果我有一个3行块注释,我需要用3个空行替换它。这是必要的,以便代码保持与原始代码相同的行号。
如何用3个空白行替换3行块注释?
编辑: 我能够通过使用SableCC来解决我的问题。
答案 0 :(得分:0)
我还没有完全怀疑正则表达式正在做什么,但是如果它与整个评论匹配,那么你可以获得匹配的评论,检查它包含多少换行符,然后将匹配替换为许多新行而不是用空字符串替换它。
答案 1 :(得分:0)
如果你在正则表达式上设置,你可以试试这个
~/(?:/.*?$|\*[^*]*\*/)~
<强> DEMO 强>
这使用了两个不同的非捕获组
由于所有评论(单行和多行)都必须以/
开头,而/
是正则表达式的第一个字符。然后,评论可以包含其他*
或/.*?$
。这是交替进入的地方。第一部分\*[^*]*\*
处理单行注释,而第二部分*
匹配多行注释。
如果您的多行评论的格式为前导<space>
后跟/* mu
* lti
* line
* comment
*/
,请执行以下操作:
*
然后这个 DEMO 应该可以解决问题(我不认为一行可以用Java中的{{1}}开头,除非它在评论)。
不幸的是,如果没有按照上面那样格式化,我还没有找到合适的替换来保留行间距。