2016-11-21 1 views
1

Sword2을 다음 문자열에 일치 시키려고합니다.루아 숫자 패턴 일치가 캡처되지 않음

당신은 loot [검] x2를받습니다.

이것은 내가 지금까지 작성한 것입니다. 검은 잘 일치하고 항목 변수에 저장됩니다. 그러나 qty는 입력 문자열에 관계없이 항상 '수량 없음'을 반환합니다.

답변

2

문제는 귀하의 패턴이 아니며, 복수 할당과 함께 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 명 이상 수량 * 대신 ?.