用于在Eclipse中匹配"非javadoc"注释的正则表达式

Jef*_*rey 10 regex eclipse replace javadoc multiline

我正在尝试编写一个与(non-javadoc)格式中的注释匹配的正则表达式

/*
 * (non-javadoc)
 *
 * some other comment here
 *
 */
Run Code Online (Sandbox Code Playgroud)

到目前为止,我有(?s)/\*\R.*?non-Javadoc.*?\*/,但实际上匹配太多了.我的文件顶部有一个标题,类似于

/*
 * header text
 */
 public class MyClass {

 }
Run Code Online (Sandbox Code Playgroud)

它匹配/*文件顶部,但我真的只想匹配生成的(non-javadoc)注释.任何人都可以帮我修复这个正则表达式吗?

编辑:我正在尝试使用Eclipse查找/替换对话框,但如果需要,我愿意使用外部工具.

Ala*_*ore 11

这应该这样做:

(?s)/\*[^*](?:(?!\*/).)*\(non-javadoc\)(?:(?!\*/).)*\*/
Run Code Online (Sandbox Code Playgroud)

/\*[^*]匹配C样式注释(/* */)的开头,但不匹配JavaDoc注释(/** */)

(?!\*/).匹配任何单个字符,除非它是*/序列的开头.搜索(?:(?!\*/).)*而不是.*?让匹配在一个评论中开始并在另一个评论中结束.

更新:对Jacek评论的(迟来的)回复:是的,你可能想要在正则表达式的末尾添加一些东西,这样你就可以用空字符串替换它,而不是在你的代码中留下很多空白行.但Jacek的解决方案比它需要的更复杂.你需要添加的是\s*

\R转义序列多种换行符,包括Unicode行分隔(匹配\u2028)和段落分离器(\u2029)和DOS /网络回车换行符+序列(\r\n).但这些都是空白字符,所以\s匹配它们(在Eclipse中,至少;根据文档,它相当于[\t\n\f\r\p{Z}]).

\s*在亚采的加料只是为了匹配任何水平的空白可能存在(空格或制表符)之前的换行,加上其后的压痕.(你必须删除它,因为你没有在评论的第一行之前删除缩进.)但事实证明它\s*可以完成整个工作:

(?s)/\*[^*](?:(?!\*/).)*\(non-javadoc\)(?:(?!\*/).)*\*/\s*
Run Code Online (Sandbox Code Playgroud)

  • 在上面的正则表达式的末尾添加`(\ s*)\ R(\ s*)`以包括以下换行符和缩进字符也是很好的.否则,使用空字符串替换将在每个注释的位置留下一个空行. (5认同)