1

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

你会收到战利品 [剑] x2。

这是我到目前为止所做的。Sword 匹配良好并保存在 item 变量中。但是,无论输入字符串如何,qty 始终返回“No qty”。

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

1 回答 1

3

问题不在于您的模式,而在于多重分配与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'

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

于 2016-11-21T05:32:55.663 回答