方法一
function split(input, delimiter)
input = tostring(input)
delimiter = tostring(delimiter)
if (delimiter == "") then return false end
local pos, arr = 0, {}
for st, sp in function() return string.find(input, delimiter, pos, true) end do
table.insert(arr, string.sub(input, pos, st - 1))
pos = sp + 1
end
table.insert(arr, string.sub(input, pos))
return arr
end
local testStr1 = "hello,world"
local testStr2 = "a,,b,c"
local testStr3 = "a+-b-+c"
local testStr4 = "www.baidu.com"
print(unpack(split(testStr1, ",")))
print(unpack(split(testStr2, ",")))
print(unpack(split(testStr3, "+-")))
print(unpack(split(testStr4, ".")))
-- hello world
-- a b c
-- a b-+c
-- www baidu com
方法二
function split(input, delimiter)
if type(delimiter) ~= "string" or #delimiter <= 0 then
return
end
local start = 1
local arr = {}
while true do
local pos = string.find(input, delimiter, start, true)
if not pos then
break
end
table.insert (arr, string.sub (input, start, pos - 1))
start = pos + string.len (delimiter)
end
table.insert (arr, string.sub (input, start))
return arr
end
local testStr1 = "hello,world"
local testStr2 = "a,,b,c"
local testStr3 = "a+-b-+c"
local testStr4 = "www.baidu.com"
print(unpack(split(testStr1, ",")))
print(unpack(split(testStr2, ",")))
print(unpack(split(testStr3, "+-")))
print(unpack(split(testStr4, ".")))
-- hello world
-- a b c
-- a b-+c
-- www baidu com
ps
在网上看到了不少使用正则表达式来进行分割的,例如:
function split(input, delimiter)
local arr = {}
string.gsub(input, '[^' .. delimiter ..']+', function(w) table.insert(arr, w) end)
return arr
end
local testStr1 = "hello,world"
local testStr2 = "a,,b,c"
local testStr3 = "a+-b-+c"
local testStr4 = "www.baidu.com"
print(unpack(split(testStr1, ",")))
print(unpack(split(testStr2, ","))) -- 无法正确分割
print(unpack(split(testStr3, "+-"))) -- 无法正确分割
print(unpack(split(testStr4, ".")))
-- hello world
-- a b c
-- a b c
-- www baidu com
可以看到对于某些字符串是无法正确分割的,所以分割字符串最好还是不要用正则表达式了吧,毕竟 Lua 对正则表达式的支持并不是特别完整!