Lua中如何通过string.gmatch匹配内容并替换为字节编码形式
Lua 双引号包裹内容转字节编码实现方案
核心思路
直接使用string.gsub完成匹配+替换全流程,无需手动遍历gmatch结果:
- 用非贪婪模式
"(.-)"匹配所有双引号包裹的内容,避免多引号场景下的贪婪匹配错误 - 对匹配到的引号内部内容逐字符转换为
\十进制ASCII码格式 - 替换时保留原有外层双引号,其余内容完全不改动
完整实现代码
-- 输入字符串转字节编码格式工具函数 local function encode_str_to_byte(str) local byte_tbl = {} for idx = 1, #str do table.insert(byte_tbl, "\\" .. tostring(string.byte(str, idx))) end return table.concat(byte_tbl) end -- 测试用例 local input = "\"Hello World!\" Don't Replace this!" local result = string.gsub(input, "\"(.-)\"", function(inner_content) return '"' .. encode_str_to_byte(inner_content) .. '"' end) print(result)
输出验证
运行上述代码,输出结果为:
"\72\101\108\108\111\32\87\111\114\108\100\33" Don't Replace this!
完全符合需求示例要求。
扩展说明
- 如果需要处理内容中包含转义双引号(即
\"不视为引号闭合)的场景,可将匹配模式调整为"([^"\\]*(?:\\.[^"\\]*)*)"即可 string.gsub默认会替换所有匹配到的引号对,批量处理多段引号内容时无需额外修改逻辑
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

