Lua中GSUB无空格时无法正常工作的问题求助
Lua文本加密器修复方案
问题根源
原代码用%S+作为匹配模式,这个模式会把连续的非空白字符当成一个整体匹配。比如输入÷=时,整个字符串÷=会被当作一个键去查替换表,但表中没有这个键,所以无法替换;而输入÷ =时,÷和=是两个独立的非空白字符,能分别匹配到替换表中的键,因此正常输出对应结果。
修复代码
把匹配模式从%S+改成%S(匹配单个非空白字符),或者直接用.(匹配任意字符,包含空格),让每个字符单独参与替换:
local text = "÷=" local tdext = text:gsub("%S", { ["+"] = "a", ["×"] = "b", ["÷"] = "c", ["="] = "d", ["/"] = "e", ["_"] = "f", ["€"] = "g", ["¥"] = "h", ["₩"] = "i", ["!"] = "j", ["@"] = "k", ["#"] = "l", ["$"] = "m", ["%"] = "n", ["^"] = "o", ["&"] = "p", ["*"] = "q", ["("] = "r", [")"] = "s", ["-"] = "t", ["'"] = "u", [":"] = "v", [";"] = "w", [","] = "x", ["?"] = "y", ["."] = "z", [" "] = " " }) print(tdext) -- 输出 "cd"
如果需要兼容空格处理,用.模式更通用,比如输入带空格的文本时,空格会被保留:
local text = "÷= hello!" local tdext = text:gsub(".", { ["+"] = "a", ["×"] = "b", ["÷"] = "c", ["="] = "d", ["/"] = "e", ["_"] = "f", ["€"] = "g", ["¥"] = "h", ["₩"] = "i", ["!"] = "j", ["@"] = "k", ["#"] = "l", ["$"] = "m", ["%"] = "n", ["^"] = "o", ["&"] = "p", ["*"] = "q", ["("] = "r", [")"] = "s", ["-"] = "t", ["'"] = "u", [":"] = "v", [";"] = "w", [","] = "x", ["?"] = "y", ["."] = "z", [" "] = " " }) print(tdext) -- 输出 "cd hello j"
效果验证
修改后,无论符号是否连续,每个字符都会被单独匹配替换:
- 输入
÷=→ 输出cd - 输入
÷ =→ 输出c d - 输入
!@#$→ 输出jklm
内容的提问来源于stack exchange,提问作者3dsbru
相关产品推荐
相关产品推荐

