Lua数字模式匹配不捕获

时间:2016-11-21 02:03:15

标签: lua lua-patterns multiple-assignment

我尝试在以下字符串中匹配Sword2

  

你收到战利品[剑] x2。

这是我到目前为止所做的。剑匹配正常并保存在项目变量中。然而,数量总是回归“没有数量”。无论输入字符串如何。

local item, qty = msg:match('%[(.+)%]x?(%d?)') or 'No item', 'No qty'

1 个答案:

答案 0 :(得分:3)

问题不在于您的模式,而是与or一起进行多重分配的方式。你拥有的实际上是什么(注意大胆的parens):

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'

关于模式,您可能希望使用%[(.+)%]x?(%d*),即*而不是?,数量为10或更多。