Sublime Text中匹配JavaDoc@param需分两步:先用/***[sS]?*//提取注释块,再在块内用*s@params+([a-zA-Z_]w)s(?: ? s*s+(.?))?(?= ? s*s@| ? s**/|$)捕获参数名及多行说明。

匹配接口文档中形如 @param 的 JavaDoc 风格参数行
Sublime Text 的正则引擎默认是 PCRE(兼容 Perl),但不支持 (?(cond)yes|no) 这类条件表达式,也不支持 Unicode 属性(如 p{L}),所以得用更保守的字符集。常见接口文档里参数行长这样:
* @param userId 用户 ID,必填
想一次性抓出所有 @param 行的参数名(比如 userId)、类型(如果有)、说明(后面的文字),关键在于:空格和换行不可贪心跨段,注释块可能混有空行或其它标签。
- 用
^s**s*@params+([a-zA-Z_]w*)匹配最简情况:开头可能有空格、*、空格、@param、至少一个空格,然后是合法标识符(userId、is_valid等) - 如果想连带捕获后续说明,加非贪婪点号:
^s**s*@params+([a-zA-Z_]w*)s+(.*?)s*$,注意结尾s*$能吞掉末尾空格和制表符 - 别用
.*跨行 —— Sublime 默认不开启dotall模式(即.不匹配换行),这是好事,避免误吞整个段落
处理多行参数说明(含换行缩进)
有些文档把说明写在下一行,且用相同缩进对齐,比如:
* @param token<br> * JWT 认证令牌,有效期 2 小时
这种不能靠单行正则搞定。得先选中整个注释块(以 /** 开头、*/ 结尾),再在块内做二次提取。
- 先用
/**[sS]*?*/批量选中所有 JavaDoc 块([sS]是 Sublime 中模拟dotall的写法) - 对每个块执行查找:
*s*@params+([a-zA-Z_]w*)s*(?: ? s**s+(.*?))?s*(?= ? s**s*@| ? s**/|$)—— 这里用(?: ? s**s+(.*?))?捕获下一行说明,(?= ? s**s*@|...)是正向先行断言,确保停在下一个标签或结尾前 - 实际操作时建议分两步:先
Ctrl+H→ 勾选Regular Expression和Match Whole Word(可选),再粘贴正则;替换时用$1 $2快速导出为 TSV 表格
绕过 @return、@throws 等干扰项
直接搜 @param 会命中注释里的示例代码,比如 // 示例:@param id 传入用户ID,这种不是真实参数声明。
- 必须锚定行首或紧邻
*后:用^s**s*@param,防止匹配到@paramType或my@param - 排除注释行内出现的情况:在查找前先
Ctrl+Shift+P→Selection: Expand Selection to Line,再手动删掉明显不在 JavaDoc 块内的匹配项 —— Sublime 没有上下文感知能力,这点得人工兜底 - 如果项目统一用 Lombok 的
@Data或 Swagger 注解(如@ApiParam),就别硬套 JavaDoc 正则,该切语法高亮模式(Java / JavaDoc / Markdown)再试
导出为 CSV 或 Markdown 表格时的编码与转义问题
说明文字里常含逗号、换行、双引号,直接用 , 分隔会破坏结构。Sublime 本身不解析 CSV,只能靠正则预处理。
- 替换说明字段时,先统一把双引号改成两个双引号(CSV 规则):
"([^"]*)" → "$1"",再用"$1"包裹整个字段 - 避免用
替换换行 —— Sublime 查找框里按Ctrl+Enter输入的是字面,但替换时需粘贴真实换行符;更稳的做法是:选中说明部分 →Ctrl+Shift+P→Replace All in Selection→ 把换行替换成\n字符串,之后再统一转义 - 导出后务必用 VS Code 或 Excel 打开验证,因为 Sublime 的 UTF-8 BOM 处理有时不一致,特别是 Windows 下生成的文件被 Excel 直接打开会乱码
真正麻烦的不是正则写法,而是文档格式不统一:有人写 @param,有人写 PARAM:,还有人用表格。正则只能覆盖 70%~80% 的规范场景,剩下得靠人工校验 —— 尤其是嵌套泛型类型(如 List<Map<String, Object>>)里的尖括号,Sublime 正则很难安全剥离。

















