寻求正则表达式:定位含inner方法的@GET注解方法
解决方案:匹配@GET方法及其关联的Inner内部方法(含startWrite)
正则表达式(需开启多行+点匹配换行模式)
要覆盖你说的跨方法场景,需要用支持多行匹配和点号匹配换行的正则工具(比如IntelliJ IDEA搜索框勾选「Regex」和「Dot matches newline」,Java代码里用Pattern.DOTALL | Pattern.MULTILINE),正则如下:
@GET\s+(?:.*?)\s+(\w+)\s*\([^)]*\)\s*\{\s*(?:.*?)\1Inner\s*\([^)]*\)\s*;\s*.*?\}.*?private\s+(?:.*?)\s+\1Inner\s*\([^)]*\)\s*\{\s*(?:.*?)startWrite\s*\([^)]*\)\s*;.*?\}
正则逻辑拆解
@GET\s+(?:.*?)\s+(\w+):定位@GET注解,捕获目标方法名到分组1(比如updateConfig)\s*\([^)]*\)\s*\{\s*(?:.*?)\1Inner\s*\([^)]*\)\s*;:匹配@GET方法体里调用同名+Inner的方法(比如updateConfigInner();).*?private\s+(?:.*?)\s+\1Inner\s*\([^)]*\)\s*\{\s*(?:.*?)startWrite\s*\([^)]*\)\s*;:匹配对应的Inner私有方法,且确认方法内存在startWrite()调用- 全程用
\s*兼容任意空格/换行,.*?非贪婪匹配避免跨多个方法误匹配
使用步骤
- 打开IDE的全局搜索,切换到正则模式,勾选「点匹配换行」选项
- 粘贴上述正则,搜索整个代码库
- 对匹配到的结果,将对应的
@GET替换为@POST即可
兼容调整
- 如果Inner方法不是私有,可把
private改成(?:private|protected|public) - 如果方法名包含下划线,把
\w+替换为[\w_]+
内容的提问来源于stack exchange,提问作者user9934848
相关产品推荐
相关产品推荐

