Lua 数字模式匹配未捕获

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

你获得了战利品 [Sword]x2。

目前的代码可以匹配到 Sword,并将其保存在 item 变量中。但是,无论输入字符串是什么,qty 都会返回“无数量”

local item, qty = msg:match('%[(.+)%]x?(%d?)') or '无物品', '无数量'
点赞
用户1728830
用户1728830

问题不在于您的模式,而是多重赋值与 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-21 05:32:55