返回 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