2016-11-21 1 views
1

J'essaie de faire correspondre Sword et 2 dans la chaîne suivante.Lua chiffre correspondant à un modèle ne saisissant pas

Vous recevez le butin [épée] x2.

C'est où je l'ai fait jusqu'ici. Sword correspond très bien et est enregistré dans la variable d'élément. Quant à qty, il renvoie toujours «No qty» quelle que soit la chaîne d'entrée.

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

Répondre

2

Le problème est pas votre modèle, il est la façon dont l'affectation multiple avec or œuvres. Qu'est-ce que vous avez est en fait (notez les parens gras):

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

Alors, qty se toujours être attribué 'No qty'. Je ne pense pas que ce problème ne puisse pas être résolu dans une seule déclaration. Vous aurez à faire quelque chose comme ceci:

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

ou

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

En ce qui concerne le modèle, vous pouvez utiliser %[(.+)%]x?(%d*), à savoir * au lieu de ? pour des quantités de 10 ou plus.