如何删除java中的注释行

时间:2016-09-04 15:59:12

标签: java regex

我想删除java文件中的注释行。     例如:Java文件包含以下注释

  1. //这是java
  2. / *我想删除注释行* /
  3. //我正在尝试
  4. / *修订版:25     为某些功能添加了此代码* /
  5. 我使用下面的正则表达式来删除评论。这是删除所有类型的评论 来自.java文件。

    string.replaceAll("(\\/\\/.*)|(\\/\\*([\\S\\s]+?)\\*\\/)", "");
    

    但我有一些特定的场景,我不想删除所有评论。 我可以使用上面的模式删除所有注释行(上面提到的1,2,3)。

    但我不想删除第4点中提到的评论,因为它包含所需信息。

    有人可以让我知道在不删除此类评论的情况下需要更改模式吗?

    注意:我知道这些信息,我不应删除评论包含“Revision:25”

2 个答案:

答案 0 :(得分:1)

正如@markspace在评论中提到的那样,您通常无法仅使用正则表达式删除多行注释<select ng-model="selectedItem" ng-options="month as month for month in months">

这是因为正则表达式描述了常规语法,而多行/* ... */注释只能由基于Context-free grammar的解析器解析(因为/* ... */总是与/*配对,这种公式不能通过常规语法描述 - 它需要堆栈,因此对应于Pushdown automata)。此问题与parentheses and square brackets issue.

类似

此外,可能是*/出现在字符串常量中,因此您还必须区分这些情况,这可能会复杂得多。

这就是为了完全解决这个任务,你需要编写自己的语法和解析器。出于这些目的,我建议您了解为这些事情设计的ANTLR

答案 1 :(得分:0)

您可以在正则表达式中为“修订版”信息添加否定lookahead

(\/\/.*)|(\/\*((?! Revision : \d+)[\S\s]+?)\*\/)
相关问题