LUA:更简单的字符串模式解决方案

时间:2018-02-16 21:55:48

标签: string design-patterns lua

我正在自己学习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值。我尝试添加神奇的炭?不同的模式,但没有做到这一点。 任何指针将不胜感激! 谢谢,

1 个答案:

答案 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