场景:
整理sql,历史遗留的sql中,表的别名都是用al1之类的格式写的,整理column字段时需要转化为表名字段模式。
这里将al1 表标识为 temp ,al18标识为table 方便理解。
简化sql如下 select al18.column from temp al1,table al18
业务实际经历了两个阶段,第一个阶段直接进行了替换,此阶段碰到的问题是,因为关联的表过多,replace的后出现了将al18 替换成了 al1 +“8”的情况(al18.column -> temp8.column) ,实际此情况可以通过排序解决,但我选择了另一个方式,在al1后拼接.。
这时进入了第二个阶段,发现替换后的字段变成了al18替换成了al1..(al18.column-> temp..column)的格式,发现这个问题后去查看了源码,发现先根据正则匹配,找到匹配的字符再替换,最终解决方案是将.进行转义(al1. -> al1\\.),这种方式避免了替换时按正则进行匹配。
但是实际上还是没有理解为什么会转为..格式的数据,应该与正则有关系,在正则匹配时将.视为了受限的匹配符?