这个功能在Lua中做什么?

时间:2017-11-07 14:26:21

标签: lua

function splitSat(str, pat, max, regex)
    pat = pat or "\n" --Patron de búsqueda
    max = max or #str

    local t = {}
    local c = 1

    if #str == 0 then
            return {""}
    end

    if #pat == 0 then
            return nil
    end

    if max == 0 then
            return str
    end

    repeat
            local s, e = str:find(pat, c, not regex)     -- Dentro del string str, busca el patron pat desde la posicion c
                                                         -- guarda en s el numero de inicio y en e el numero de fin
            max = max - 1
            if s and max < 0 then
                    if #(str:sub(c)) > 0 then           -- Si la longitud de la porcion de string desde c hasta el final es mayor que 0
                            t[#t+1] = str:sub(c)
                    else                                                                                                                                                                                     values
                            t[#t+1] = ""    --create a table with empty  
                    end
            else
                    if #(str:sub(c, s and s - 1)) > 0 then          -- Si la longitud de la porcion de string str entre c y s
                            t[#t+1] = str:sub(c, s and s - 1)
                    else
                            t[#t+1] = ""            --create a table with empty values
                    end
            end
            c = e and e + 1 or #str + 1
    until not s or max < 0

    return t
    end

我想知道这个功能在做什么。我知道它是一种带有字符串和模式的表格。特别是我想知道*t[#t+1] = str:sub(c, s and s - 1)*正在做什么。

1 个答案:

答案 0 :(得分:0)

从我得到的,它将一个长字符串拆分为匹配某个模式的子字符串,并忽略模式匹配之间的所有内容。例如,它可能会将字符串11aa22与模式\d\d匹配,从而生成表["11", "22"]

t[#t+1] = <something>在表格t的末尾插入一个值,它与table.insert(t, <something>)

相同

#t返回数组的长度(即具有连续数字索引的表),例如#[1, 2, 3] == 3

str:sub(c, s and s - 1)利用了许多luas功能。如果s and s - 1不是s-1,则s评估为nil,否则为零。如果s-1s

,则nil只会引发错误
  • 10 and 10 - 1 == 9
  • 10 - 1 == 9
  • nil and nil - 1 == nil
  • nil - 1 - &gt;抛出错误

str:sub(a, b)只返回一个从a开始到b结束的子字符串(ab是数字索引)

("abcde"):sub(2,4) == "bcd"