You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lua中如何通过string.gmatch匹配内容并替换为字节编码形式

Lua 双引号包裹内容转字节编码实现方案

核心思路

直接使用string.gsub完成匹配+替换全流程,无需手动遍历gmatch结果:

  1. 用非贪婪模式"(.-)"匹配所有双引号包裹的内容,避免多引号场景下的贪婪匹配错误
  2. 对匹配到的引号内部内容逐字符转换为\十进制ASCII码格式
  3. 替换时保留原有外层双引号,其余内容完全不改动

完整实现代码

-- 输入字符串转字节编码格式工具函数
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 14:45:01