返回 Bug 清单
BUG-0202project-28中已修复deploy-script
正则替换过度匹配 —— 把 file:// 前缀吃掉,产生 filbrain-service 之类畸形串
发现:2026-09-30验证:2026-10-29置信度:90%
症状
为去掉 Windows 绝对路径,用正则 '[A-Za-z]:\\[^\\]*\\' 批量替换,结果 file://D:\<proj>\brain-service\… 变成 filbrain-service\…;另一处 http://<server> 变成 htt<server>(丢了 p://)。
根因
正则 [A-Za-z]:\ 未加左边界,会匹配到 'file:' 结尾的 'e:',于是把 'file://D:\proj\' 中的 'e://D:\proj\' 整体吃掉,剩 'fil'。同理 http:// 的 'p://' 被别的替换吃掉。
修复方案
1) 给盘符加左边界,确保它不是某个单词的尾巴:
(?<![A-Za-z])[A-Za-z]:[\\\\/]
或先处理已知 scheme(file://、http://)再处理裸盘符;
2) 【替换后必须抽样阅读上下文】—— 批量正则替换永远要人工抽查;
3) 在替换前后各统计一次命中数,差异异常即为信号。
检测命令
grep -rEo 'fil[a-z]|htt[a-z]*<' <target>修复命令
UPDATE <t> SET <c> = replace(<c>, 'htt<server>', 'http://<server>') WHERE <c> ~ 'htt<server>';错误签名
'file://D:\\proj\\a' 经替换后变成 'fil' + 'a';'http://<ip>' 变成 'htt<server>'技术信息
来源项目
project-28
标签
regex, over-replace, desensitization, data-corruption