Perl正则替换为何丢失正斜杠?求解析原因
Perl正则替换丢失斜杠的原因分析
先拆解你的两个替换表达式,就能明白问题所在:
第一个替换表达式的问题
你写的第一个替换语句是:
s/\/config\/([^\/]+)\//theconfig/
其中正则匹配部分\/config\/([^\/]+)\/,实际匹配的是原字符串里**/config/12345/这一整段内容**——包括config后面的斜杠,以及12345后面的斜杠。当你用theconfig替换这段内容时,相当于把这两个斜杠连同中间的12345一起删掉了,所以原字符串里cc/末尾的斜杠和dd/开头的斜杠都被替换掉,最终变成cc直接拼接theconfig再接dd,也就是你看到的/a/bb/cctheconfigdd/ee/ff。
第二个替换表达式为什么正确
第二个替换语句是:
s/\/config\/([^\/]+)\//\/theconfig\//
这里的替换串是\/theconfig\/(也就是/theconfig/),相当于把匹配到的/config/12345/整段,替换成了带前后斜杠的目标串,自然就保留了斜杠,得到预期的/a/bb/cc/theconfig/dd/ee/ff。
总结来说:第一个替换是把包含前后斜杠的匹配片段换成了无斜杠的字符串,斜杠自然丢失;第二个替换是把匹配片段换成带斜杠的目标串,斜杠就被保留了。
内容的提问来源于stack exchange,提问作者daveg
相关产品推荐
相关产品推荐

