能否让Lua的string.gsub()从右向左执行替换操作?
Lua替换字符串最后一个匹配项的简便方法
Lua里string.gsub的第四个参数是替换次数,传-1确实会替换所有匹配项,和默认行为一致,靠这个参数实现反向替换行不通。
给你两个更直接的方案:
方案一:利用贪婪模式的正则匹配
直接用模式匹配定位最后一个_L,Lua模式的.*是贪婪匹配,会尽可能覆盖到最后一个_L之前的所有内容,替换逻辑更简洁:local result = string.gsub("Bone_L_L", "^(.*)_L", "%1_R") -- 输出结果:Bone_L_R如果要避免误替换非末尾的
_L,可以加上结尾锚定,仅当字符串以_L结尾时才执行替换:local result = string.gsub("Bone_L_L", "^(.*)_L$", "%1_R")方案二:反转字符串(你提到的思路)
这个方法也能实现需求,只是步骤稍多:local reversed = string.reverse("Bone_L_L") reversed = string.gsub(reversed, "^L_", "R_", 1) -- 替换反转后第一个匹配项(对应原字符串最后一个_L) local result = string.reverse(reversed) -- 输出结果:Bone_L_R
对比下来,方案一无需反转字符串,代码更简洁直接,是更简便的选择。
内容的提问来源于stack exchange,提问作者Rai
相关产品推荐
相关产品推荐

