我正在尝试匹配Sword并2在以下字符串中。
你会收到战利品 [剑] x2。
这是我到目前为止所做的。Sword 匹配良好并保存在 item 变量中。但是,无论输入字符串如何,qty 始终返回“No qty”。
local item, qty = msg:match('%[(.+)%]x?(%d?)') or 'No item', 'No qty'
我正在尝试匹配Sword并2在以下字符串中。
你会收到战利品 [剑] x2。
这是我到目前为止所做的。Sword 匹配良好并保存在 item 变量中。但是,无论输入字符串如何,qty 始终返回“No qty”。
local item, qty = msg:match('%[(.+)%]x?(%d?)') or 'No item', 'No qty'
问题不在于您的模式,而在于多重分配与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 或更多的数量。