我想删除java文件中的注释行。 例如:Java文件包含以下注释
我使用下面的正则表达式来删除评论。这是删除所有类型的评论 来自.java文件。
string.replaceAll("(\\/\\/.*)|(\\/\\*([\\S\\s]+?)\\*\\/)", "");
但我有一些特定的场景,我不想删除所有评论。 我可以使用上面的模式删除所有注释行(上面提到的1,2,3)。
但我不想删除第4点中提到的评论,因为它包含所需信息。
有人可以让我知道在不删除此类评论的情况下需要更改模式吗?
注意:我知道这些信息,我不应删除评论包含“Revision:25”
答案 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]+?)\*\/)