【问题标题】:Lua digit pattern matching not capturingLua数字模式匹配未捕获
【发布时间】:2016-11-21 02:03:14
【问题描述】:
我正在尝试匹配以下字符串中的Sword 和2。
你会收到战利品 [剑]x2。
这是我到目前为止所做的。 Sword 匹配良好并保存在 item 变量中。但是,无论输入字符串如何,qty 始终返回“No qty”。
local item, qty = msg:match('%[(.+)%]x?(%d?)') or 'No item', 'No qty'
【问题讨论】:
标签:
lua
lua-patterns
multiple-assignment
【解决方案1】:
问题不在于你的模式,而是多重赋值与or 一起工作的方式。您实际上拥有的是(注意粗体括号):
local item, qty =(msg:match('%[(.+)%]x?(%d?)') or 'No item'), 'No qty'
因此,qty 将始终分配给 'No qty'。我不认为这个问题可以在一个单一的声明中解决。你必须这样做:
local item, qty = msg:match('%[(.+)%]x?(%d?)')
item = item or 'No item'
qty = qty or 'No qty'
或
local item, qty = msg:match('%[(.+)%]x?(%d?)')
item, qty = item or 'No item', qty or 'No qty'
关于模式,对于 10 个或更多的数量,您可能希望使用 %[(.+)%]x?(%d*),即 * 而不是 ?。