我正在自己学习LUA,并希望对下一段代码有所帮助:
offset= "1h2m3s4f"
off_h = offset:match("(%d+)h")
off_m = offset:match("(%d+)m")
off_s = offset:match("(%d+)s")
off_f = offset:match("(%d+)f")
print(off_h)
print(off_m)
print(off_s)
print(off_f)
我已经尝试了将所有模式连接到单行偏移的所有内容:匹配但是在线阅读了许多资源之后,我仍然无法做到这一点。 问题是,用户可能只输入2m3s4f而没有任何h或数字 他可能只输入1m2f。
当我删除其中一个模式条件时,我对单个模式检查的测试导致了完整的nil值。我尝试添加神奇的炭?不同的模式,但没有做到这一点。 任何指针将不胜感激! 谢谢,
答案 0 :(得分:2)
for _, offset in ipairs{"1h2m3s4f", "2m3s4f", "1m2f"} do
local fields = {}
offset:gsub("(%d+)([hmsf])", function(n,u) fields[u] = n end)
print(fields.h, fields.m, fields.s, fields.f)
end
输出:
1 2 3 4
nil 2 3 4
nil 1 nil 2
-- Shortest, but slowest variant
for _, offset in ipairs{"1h2m3s4f", "2m3s4f", "1m2f"} do
local h, m, s, f = offset:match"^(%d-)h?(%d-)m?(%d-)s?(%d-)f?$"
print(h, m, s, f)
end
输出:
1 2 3 4
2 3 4
1 2