LUA выбрать конкретную строку в таблице - PullRequest
0 голосов
/ 26 июня 2018

У меня проблема с восстановлением значений из таблицы LUA.

Таблица (строка):

table = {
key = "/get value0\n/get [opt1][opt2] value1\n/get [opt1][opt2][opt3][opt4] value2\n/get value3\n/get [opt1] value4",
},

возможно ли выбрать "/ get" и "value0" для первой строки. и "/ ​​get" и "value1 или 2/3/4" во всех других строках?

Я думаю, у меня есть идея, чтобы это сработало, но проще сказать, чем сделать

  • 1) Подсчитывает общее количество "\ n" и добавляет один.
  • 2) Выберите сначала «/» и первый пробел.
  • 3) Выберите последний "]", если присутствует, или последний пробел перед значением.
  • 4) повторите операцию для каждой строки.

результат:

/get value0 
/get value1 
/get value2 
/get value3 
/get value4

1 Ответ

0 голосов
/ 26 июня 2018

Попробуйте этот код:

s=[[
/get value0
/get [opt1][opt2] value1
/get [opt1][opt2][opt3][opt4] value2
/get value3
/get [opt1] value4
]]

for l in s:gmatch("(/.-)\n") do
    print((l:gsub("%b[]%s*","")))
end

Сначала она разбивает строку на строки, а затем удаляет все строки в скобках, а затем пробелы.

Более простое совпадение - l:gsub(" .* "," "), которое удалит все с первого пробела до последнего.

Если вы хотите разбить полученную строку, используйте этот код:

for l in s:gmatch("(/.-)\n") do
    local var1, var2 = l:gsub(" .* "," "):match("(.*) (.*)$")
    print(var1, var2 )
end
...