2015-10-04 68 views
0

我想写一个java正则表达式从我的代码中删除所有注释,我有一些非常复杂的嵌套注释,因此我只能匹配内部注释,这里是我的注解用于匹配多行嵌套注释的java正则表达式

@annotationA(property1 = "", 
     property2 = "", 
     property3 = "", 
     property4 = "", 
     property5 = "") 
public class ClassA { 

    @annotationB(property1 = @annotationA(property5 = "anyChar", 
      property6 = false, 
      property1 = "anyChar", 
      property2 = "anyChar", 
      property3 = "anyChar", 
      property4 = "anyChar"), 
      params = { @annotationC(property7 = @annotationA(property5 = "anyChar"), property8 = @annotationA(property5 = "anyChar")), 
        @annotationC(property7 = @annotationA(property5 = "anyChar"), property8 = @annotationA(property5 = "anyChar")), 
        @annotationC(property7 = @annotationA(property5 = "anyChar"), property8 = @annotationA(property5 = "anyChar")), 
        @annotationC(property7 = @annotationA(property5 = "anyChar"), property8 = @annotationA(property5 = "anyChar")), 
        @annotationC(property7 = @annotationA(property5 = "anyChar"), property8 = @annotationA(property5 = "anyChar")), 
        @annotationC(property7 = @annotationA(property5 = "anyChar"), property8 = @annotationA(property5 = "anyChar")), 
        @annotationC(property7 = @annotationA(property5 = "anyChar"), property8 = @annotationA(property5 = "anyChar")), 
        @annotationC(property7 = @annotationA(property5 = "anyChar"), property8 = @annotationA(property5 = "anyChar")), 
        @annotationC(property7 = @annotationA(property5 = "anyChar"), property8 = @annotationA(property5 = "anyChar")), }, 
      returnType = @annotationA(property5 = "anyChar")) 
    //some methode 

} 

这里的为例是我正则表达式(不转义):

@\w+\([\n\w\s=\-"\@,.*:// {\+ }\.;+]+\) 
+0

正则表达式不是解析java语言的正确工具。您可以考虑使用像[antlr](http://www.antlr.org)这样的解析器生成器,尽管学习曲线可能很陡峭。您可以在https://github.com/antlr/grammars-v4/blob/master/java/Java.g4找到Java语言的现成语法 – Gowtham

回答

1

如果你想删除的注解,和你有一个正则表达式,将发现非基本上你已经完成了。除非它是一个性能敏感的任务,否则您可以反复遍历该regex,每次删除它匹配的内容。在内部注释被删除之后,将不再有嵌套的注意。当正则表达式无法匹配任何内容并且完成时,结束这个过程!

你的例子(在Notepad ++中)花了3个replaceAlls来完全清理,看起来可以接受。