Соответствие шаблону с тегом в Lua
Я пытаюсь разобрать текст и на основе тегов выполнять действия.
Текст таков:
<window>
<caption>My window
</window>
<panel>
<label>
<caption>
<position>50,50
<color>255,255,255
</label>
</panel>
Код:
function 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("Invalid data");
stop();
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 --> searching for window/panel start and end tags
if (findInArray(main_obj,tag_name)) then
print(start_tag)
parse_tag(chunck); --> parses the tag with child tag
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%>
или конец куска.
2 ответа
string.gfind(data,"<(.-)>(.-)")
Здесь вы пытаетесь сопоставить значение с .-
, Тем не мение, -
ленивый, т.е. .-
будет пытаться сопоставить как можно меньше, в этом случае, пустую строку.
Попробуйте сказать, чтобы соответствовать до следующего <
:
string.gfind(data,"<(.-)>(._)<")
Пробовал разные виды захватов. это
string.gfind(data,"<(.-)>([^%<+.-%>+]+)")
Кажется работать