Шаблон Lua string.match для службы погоды MSN

Я использую службу погоды MSN. Теперь у меня следующая проблема с string.match. Заполнены все переменные, кроме sWindRichtung. Это равно nil.

sHumidity, rest = string.match(rest,"humidity=\"([^\"]+)\"(.*)");
sWind, rest = string.match(rest,"windspeed=\"([^\"]+)\"(.*)");
sWindRichtung, rest = string.match(rest,"winddisplay=\"([^\"]+)\"(.*)");

Строка для фильтрации: humidity="77" winddisplay="11 km/uur N" windspeed="11"

Я думаю, что проблема в персонаже /.


person Mark Munsterman    schedule 25.11.2013    source источник
comment
Проблема в том, что ваш анализ предполагает определенный порядок полей. После синтаксического анализа windspeed после него ничего не приходит, поэтому rest является пустой строкой.   -  person greatwolf    schedule 26.11.2013
comment
Спасибо за ответ. Я нашел решение.   -  person Mark Munsterman    schedule 26.11.2013
comment
Добавьте свое решение в качестве ответа.   -  person lhf    schedule 26.11.2013


Ответы (1)


Вы можете разобрать строку за один раз. Попробуй это:

s = [[
humidity="77" winddisplay="11 km/uur N" windspeed="11"
]]

for k,v in s:gmatch('(%a+)="(.-)"') do
        print(k,v)
end

Конечно, вы можете сохранить значения в таблице.

person lhf    schedule 25.11.2013