Split a string using string.gmatch() in Lua

后端 未结 3 1054
南笙
南笙 2020-12-15 11:35

There are some discussions here, and utility functions, for splitting strings, but I need an ad-hoc one-liner for a very simple task.

I have the following string:

相关标签:
3条回答
  • 2020-12-15 11:48

    Just changing * to + works.

    local s = "one;two;;four"
    local words = {}
    for w in s:gmatch("([^;]+)") do 
        table.insert(words, w) 
        print(w)
    end
    

    The magic character * represents 0 or more occurrene, so when it meet ',', lua regarded it as a empty string that [^;] does not exist.

    0 讨论(0)
  • 2020-12-15 12:11
    function split(str,sep)
        local array = {}
        local reg = string.format("([^%s]+)",sep)
        for mem in string.gmatch(str,reg) do
            table.insert(array, mem)
        end
        return array
    end
    local s = "one;two;;four"
    local array = split(s,";")
    
    for n, w in ipairs(array) do
        print(n .. ": " .. w)
    end
    

    result:

    1:one

    2:two

    3:four

    0 讨论(0)
  • 2020-12-15 12:13
    local s = "one;two;;four"
    local words = {}
    for w in (s .. ";"):gmatch("([^;]*);") do 
        table.insert(words, w) 
    end
    

    By adding one extra ; at the end of the string, the string now becomes "one;two;;four;", everything you want to capture can use the pattern "([^;]*);" to match: anything not ; followed by a ;(greedy).

    Test:

    for n, w in ipairs(words) do
        print(n .. ": " .. w)
    end
    

    Output:

    1: one
    2: two
    3:
    4: four
    
    0 讨论(0)
提交回复
热议问题