Lua - 太多的捕获。如何解决?

遇到了这个问题。如果尝试转换西里尔字母或者单词太长有太多符号就会出错

1

function to_string(t)
    local o = {};
    for _, v in ipairs(t) do
        local b = v < 0 and (0xff + v + 1) or v;
        table.insert(o, string.char(b));
    end
    return table.concat(o);
end
function to_bytes(s)
    local c = { s:match( (s:gsub(".", "(.)")) ) };
    local o = {};
    for _, v in pairs(c) do
        table.insert(o, v:byte());
    end
    return o;
end
local t = to_bytes("如果这里有太多的单词或者俄语文字");
local out = "\\"
local chars = #t;
for i = 1, chars do
    out = out..tostring(t[i]);
    if i < chars then
        out = out.."\\"
    end
end
out = out..""

原文链接 https://stackoverflow.com/questions/69802347

点赞
stackoverflow用户1442917
stackoverflow用户1442917

我认为错误的原因是不言自明的:你的模式中捕获的次数过多(用括号包起来的那些分组)。默认值为32。你有几个选项:(1)重新编译你的Lua版本,使用更大的数字(你必须修改LUA_MAXCAPTURES的值),但要记住这个限制是有原因的;(2)更改你的模式,避免使用这么多捕获(可能需要将其分成较小的片段/模式)。你也可以考虑使用更强大的解析器,如LPEG

2021-11-02 02:36:40
stackoverflow用户1847592
stackoverflow用户1847592

你不需要正则表达式将字符串转换为字节数组

function to_bytes(s)
    return {s:byte(1, -1)}
end
2021-11-02 07:52:36