Lua将表路径字符串解析为表

时间:2016-09-07 15:27:01

标签: lua lua-patterns

我需要解析一个表示表的路径的字符串,并将其转换为实际的表以查找嵌套在表结构中的值:

local function strsplit(str, sep)
    sep = sep or "%s";
    local tbl = {};
    local i = 1;
    for str in string.gmatch(str, "([^"..sep.."]+)") do
        tbl[i] = str;
        i = i + 1;
    end
    return tbl;
end

local function parser(path, tbl)
    local value;
    local keys = strsplit(path, ".");

    for _, key in pairs(keys) do
        value = (value and value[key]) or tbl[key];
    end
    return value;
end

local data = {
    colors = {
        r = 1, g = 1, b = 1
    }
}

local red = parser("colors.r", data);
print(red); -- prints 1 (correct!)

此代码与预期输出完美匹配。但是,我想改变“解析器”功能,以便它也可以使用数字索引值而不仅仅是字符串作为键(表的索引部分,而不仅仅是哈希表):

local data = {
    list = {
        50, 40, 30, 20, 10
    }
}

local value = parser("colors.list[2]", data);
print(value); -- should print 40

当拆分表示表路径的字符串时,其中一个键将变为“list [2]”,这应该转换为真实表。因此,我将需要某种正则表达式匹配解决方案,它将能够识别方括号并使其成为魔术;我只是不知道从哪里开始。

0 个答案:

没有答案