在Lua中使用标签进行模式匹配

我正在尝试解析一段文本,并根据标签执行操作。

文本是:

<window>
    <caption>My window
</window>
<panel>
    <label>
        <caption>
        <position>50,50
        <color>255,255,255
    </label>
</panel>

代码:

函数parse_tag(chunck)
    for start_tag,tag_name in string.gfind(chunck,"(<(.-)>)") do
        if (child_obj[tag_name]) then
            print(start_tag)
            for data,end_tag in string.gfind(chunck,"<" .. tag_name ..">(.-)(</" .. tag_name ..">)") do
                for object_prop,value in string.gfind(data,"<(.-)>(.-)") do
                    print("setting property = \"" .. object_prop .. "\", value of" .. value);
                end
            end
            print("</" .. tag_name ..">");
        elseif(findInArray(main_obj,tag_name)) then
            print("无效数据");
            停止();
        end
    end
end
for key,tag in ipairs(main_obj) do
    for start_tag,tag_name,chunck,end_tag in string.gfind(data,"(<(" .. tag.name .. ")>)(.-)(</" .. tag.name .. ">)") do --> 搜索窗口/面板的起始和结束标签
        if (findInArray(main_obj,tag_name)) then
            print(start_tag)
            parse_tag(chunck); --> 解析具有子标签的标签
            print(end_tag)
        end
    end
end

似乎无法获取值,因为我得到了以下输出。

<window>
</window>
<panel>
<label>
setting property = "caption", value of
setting property = "position", value of
setting property = "color", value of
</label>
</panel>

如何使用<%tag%>后的字符串,直到下一个<%tag%>或块结束。

点赞
用户1009479
用户1009479
你尝试与 `.-` 匹配值。然而,`-` 是懒惰的,也就是说,`.-` 会尝试尽可能少地匹配,对于这种情况,就是一个空字符串。

尝试告诉它匹配到下一个 `<` :

string.gfind(data,"<(.-)>(._)<") ```

2014-09-13 12:09:16
用户3185939
用户3185939

尝试了不同类型的捕获方式。

这个

string.gfind(data,"<(.-)>([^%<+.-%>+]+)")

似乎有效。

2014-09-13 12:35:57