2014-01-19 31 views
3

工作,例如,我們有一個字符串正確的模式不會在Lua gmatch

local str = "12345:some.address.ru:1234" 

我們需要解析這個字符串:

var1 = "12345" -- mandatory 
var2 = "some.address.ru" -- can be nil 
var3 = "1234" -- can be nil 

我寫這樣的代碼:

for var1, var2, var3 in str:gmatch('^(%d+)%:?([%a.]*)%:(%d+)$') do 
print(var1) 
print(var2) 
print(var3) 
end 

但我沒有收到任何結果。如果我在模式開始時刪除了simbol ^,它運行良好。 有什麼問題?爲什麼它不適用於simbol ^我該如何解決它? (我需要檢查這個模式是從字符串開頭開始的)

並且有沒有機會在沒有for循環的情況下做這個工作? (我的字符串不包含更多的則1模式)

感謝

回答

4

manual說,這大約gmatch:在模式不爲工作的開始

一個插入符號「^」一個錨,因爲這會阻止迭代。

你不需要循環,所以不需要gmatch。只要做

var1, var2, var3=str:match('(%d+)%:?([%a.]*)%:(%d+)$') 
print(var1) 
print(var2) 
print(var3) 

添加^的模式是無害的。

更簡單的模式是'(.-):(.-):(.-)$’

請注意,在這兩種情況下,您都不需要在開始時錨定該模式,但您需要在最後錨定它。