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)*
正在做什么。
答案 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-1
为s
nil
只会引发错误
10 and 10 - 1
== 9
10 - 1
== 9
nil and nil - 1
== nil
nil - 1
- &gt;抛出错误 str:sub(a, b)
只返回一个从a
开始到b
结束的子字符串(a
和b
是数字索引)
("abcde"):sub(2,4)
== "bcd"