java 用于匹配多行嵌套注释的正则表达式
java regex for matching multiline nested annotation
我正在尝试编写一个 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=\-"\@,.*:// {\+ }\.;+]+\)
如果您尝试删除注释,并且您有一个可以找到非嵌套注释的正则表达式,那么您基本上就完成了。除非它是一项对性能敏感的任务,否则您可以一遍又一遍地迭代该正则表达式,每次删除它匹配的内容。删除内部注释后,将不再需要处理嵌套注释。当正则表达式无法匹配任何内容时结束进程,您就完成了!
您的示例(在 Notepad++ 中)用了 3 个 replaceAlls 来完全清理,看起来可以接受。
我正在尝试编写一个 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=\-"\@,.*:// {\+ }\.;+]+\)
如果您尝试删除注释,并且您有一个可以找到非嵌套注释的正则表达式,那么您基本上就完成了。除非它是一项对性能敏感的任务,否则您可以一遍又一遍地迭代该正则表达式,每次删除它匹配的内容。删除内部注释后,将不再需要处理嵌套注释。当正则表达式无法匹配任何内容时结束进程,您就完成了!
您的示例(在 Notepad++ 中)用了 3 个 replaceAlls 来完全清理,看起来可以接受。