string find, gsub, gmatch使用

【find实现字符串分割】

# 只支持ascii字符,不支持中文这种

function Split(str, delimiter)
    local arr = {}

    local index = 1
    while true do
        local index1, index2 = string.find(str, delimiter, index, true)
        if nil == index1 then break end
        table.insert(arr, string.sub(str, index, index1-1))
        index = index2 + 1
    end
    table.insert(arr, string.sub(str, index))
    return arr
end

# for in方式

function Split(str, delimiter)
    local arr = {}

    local index = 1
    local iteratorFunc = function(iteratorObj, key)
        local index1, index2 = string.find(str, delimiter, index, true)
        return index1, index2
    end
    for index1, index2 in iteratorFunc do
        table.insert(arr, string.sub(str, index, index1-1))
        index = index2 + 1
    end
    table.insert(arr, string.sub(str, index))
    return arr
end

 

【find解析用逗号分割的物品描述字符串】

字符串格式:类型_id_数量

 1 function Test3()
 2     local str = "aa_10001_16,aa_10002_12,aa_10003_10"
 3     local pattern = "((%w+)_(%d+)_(%d+)),?"
 4 
 5     local entrys = {}
 6     local index = 1
 7     while true do
 8         local index1, index2, str, t, id, num = string.find(str, pattern, index)
 9         if nil == index1 then break end
10         index = index2 + 1
11         print(index1, index2, str, t, id, num)
12         table.insert(entrys, { str, t, tonumber(id), tonumber(num) })
13     end
14     return entrys
15 end
16 Test3()

 

【gmatch解析逗号分割的id列表】

 1 function Test6()
 2     local strArr = {
 3         "1001,1002,1003,1004",
 4         "1001",
 5     }
 6     for i=1,#strArr do
 7         local idList = {}
 8         local str = strArr[i]
 9         local itr = string.gmatch(str, "(%d+)(,?)")
10         for idStr in itr do
11             print(idStr)
12             table.insert(idList, idStr)
13         end
14     end
15 end
16 Test6()

 

【gsub替换某个类型的物品描述字符串】

比如:bb类型的物品字符串全部替换

 1 function Test5()
 2     local strArr = {
 3         "aa_10001_16,bb_10001_12,cc_10001_10",
 4         "bb_10001_12",
 5     }
 6     local pattern = "(bb_(%d+)_(%d+))(,?)"
 7 
 8     for i=1,#strArr do
 9         local str = strArr[i]
10         local str2, replCount = string.gsub(str, pattern, "ab_%2_%3%4")
11         print(str2)
12     end
13 end
14 Test5()

 

posted @ 2021-12-04 00:40  yanghui01  阅读(214)  评论(0编辑  收藏  举报