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)

我已经尝试过将模式连接成单行的offset:match,但是在阅读了许多在线资源后,我仍然不知道怎么做。问题是用户可能只输入2m3s4f,而没有任何h或他可能只输入1m2f。

当我删除了其中的一个模式条件时,我的单一模式检查测试会产生完全的nil值。我尝试向不同的模式添加魔法字符?但那并没有起作用。任何指针都将不胜感激! 谢谢,

点赞
用户1847592
用户1847592
# Lua 解析时间字串

对于每一个字符串 `offset`,尝试解析出其对应的时间值并打印。

## 方法一

```lua
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

```

2018-02-16 23:50:37