如何用单条Perl正则在SQL INSERT指定组的大写字母前加空格
解决SQL INSERT语句中特定字段的大写字母加空格问题
看起来你卡在了只修改第二个N'...'字段里的驼峰命名、同时保持第一个字段不变的需求上——之前的正则只处理了一处大写字母,确实让人头疼。
这里给你一个单条Perl正则表达式的解决方案,能一次性处理目标字段里所有需要加空格的大写字母:
s/(, N')([^']+)/$1 . ($2 =~ s/(?<=[a-z])([A-Z])/ $1/gr)/e;
拆解一下这个正则的逻辑:
(, N'):精准定位到目标字段的开头(, N'),把这部分捕获为$1,后续原样放回([^']+):捕获N'到下一个'之间的所有内容(也就是你要修改的驼峰字符串),记为$2/e修饰符:让Perl执行替换部分的代码逻辑,而不是直接替换字符串- 内部的
$2 =~ s/(?<=[a-z])([A-Z])/ $1/gr:对捕获到的驼峰字符串做全局替换——匹配前面是小写字母的大写字母,在它前面插入空格;gr确保替换所有符合条件的字符,并且返回修改后的结果
用你的例子测试:
原字符串:, 'DateOfBirth' , N'DateOfBirth')
执行后得到:, 'DateOfBirth' , N'Date Of Birth')
为什么之前的正则没生效?
你之前写的(, N'.+)([a-z])([A-Z])(.+)只能匹配到一处符合小写+大写的组合(也就是fB),而且没有全局替换的逻辑,所以只能修改最后一处大写字母。这个方案通过嵌套替换和全局修饰符,一次性处理所有需要调整的位置。
内容的提问来源于stack exchange,提问作者Bob Z
相关产品推荐
相关产品推荐

