2016-11-21 3 views
1

Ich versuche, Sword und 2 in der folgenden Zeichenfolge übereinstimmen.Lua Ziffer Mustererkennung nicht erfassen

Sie erhalten Beute [Schwert] x2.

Dies ist, wo ich es bis jetzt gemacht habe. Schwert passt gut und wird in der Gegenstandsvariable gespeichert. Die Menge gibt jedoch unabhängig von der Eingabezeichenfolge immer 'Keine Menge' zurück.

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

Antwort

2

Das Problem ist nicht Ihr Muster, es ist die Art und Weise der Mehrfachzuordnung zusammen mit or funktioniert. Was Sie haben, ist eigentlich (beachten Sie die fett Pars):

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

So qty wird immer'No qty' zugeordnet werden. Ich glaube nicht, dass dieses Problem nicht in einer einzigen Aussage gelöst werden kann. Sie werden so etwas zu tun haben:

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

oder

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

das Muster anbetrifft, Sie könnten %[(.+)%]x?(%d*), das heißt * statt ? für Mengen von 10 oder mehr verwenden möchten.