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)