我正在尝试匹配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 或更多的数量。