2015-10-21 66 views
3

我有一個字符,數字和字符數量未知的複雜字符串。例如使用複雜圖案的字符串解析

"a83bal*av31-ab+asf3/af1124-xxx.afe-100/araw31/31*xxx.g41.abt.eta+131as*dfa" 

的目標是找到字符串xxx和提取後的一切,直到+-*/。因此,我應該能夠提取xxx.afexxx.g41.abt.eta查找字符串很簡單string:find("xxx")我遇到的麻煩是收集所有信息後面的"xxx"直到其中一個操作員。我嘗試過的東西,如

string:match("xxx.(.+[%+%-%*%/])") 

和以上幾種變化,但有一些我失蹤。

回答

1
str = "a83bal*av31-ab+asf3/af1124-xxx.afe-100/araw31/31*xxx.g41.abt.eta+131as*dfa"  
for m in str:gmatch("[+%-*/](xxx.-)[+%-*/]") do 
    print(m) 
end 

注意-具有特殊的意義,即使裏面的字符集(例如,[1-9a-f]),因此必須進行轉義,或放在開頭或字符集的結束,即,[-+*/]

1

您可以使用否定的字符類匹配([^-+*/]):

for sWord in str:gmatch "xxx%.([^-+*/]+)" do 
    -- do things to sWord 
end 

需要注意的是,在看您的代碼段;你正在使用名爲string的變量。 string在lua環境中存儲一般字符串數據類型的元數據。請避免使用那樣的變量名稱。

+1

'string'不存儲字符串的元字符。它存儲那個metatable的'__index'值。 –