用分隔符規則分割一個字串 (string.split)
聲明
分割好的文字陣列 = string.split(待分割文字, 分隔符)
參數
- 待分割文字
文字型,需要分割的字串 - 分隔符
文字型,分隔符
回傳值
- 分割好的文字陣列
表型,分割後的字串片段按順序排列於此表
說明
用分隔符規則分割一個字串
關鍵詞:字串分割、文字分割、文字切割、文字分段
範例
-- 示例 1 (分割賬號密碼) :
t = string.split('lfue6841214----123456', '----')
sys.alert('账号是:'..t[1])
--
-- 示例 2 (取文本中間部分,兩個 # 之間的文字) :
t = string.split('您好,验证码是#4937#,15分钟内有效。【爆炸科技】', '#')
sys.alert('验证码是:'..t[2])
--
-- 示例 3 (複雜點的取文本中間部分) :
t = string.split('您好,验证码是4937,15分钟内有效。【爆炸科技】', '验证码是')
t = string.split(t[2], ',15分钟')
sys.alert('验证码是:'..t[1])
注:上述代碼中使用了非本章函式 sys.alert
封裝範例 1
-- 取文本中間部分的封裝 (找不到匹配返回 nil)
function str_middle(str, sep1, sep2)
assert(type(str) == 'string', '`str_middle` 第 #1 参数必须是字符串')
assert(type(sep1) == 'string', '`str_middle` 第 #2 参数必须是字符串')
assert(type(sep2) == 'nil' or type(sep2) == 'string', '`str_middle` 第 #3 参数可选,但必须是字符串')
local t = string.split(str, sep1)
if not sep2 or sep1==sep2 then
return t[2]
else
if t[2] == nil then
return nil
else
t = string.split(t[2], sep2)
if t[2] == nil then
return nil
else
return t[1]
end
end
end
end
-- 以上封裝可複製到腳本中用
--
r = str_middle('您好,验证码是4937,15分钟内有效。【爆炸科技】', '码是', ',15分')
sys.alert('验证码是:'..r)
-- 輸出 "验证码是:4937"
--
r = str_middle('您好,验证码是#8346#,15分钟内有效。【爆炸科技】', '#')
sys.alert('验证码是:'..r)
-- 輸出 "验证码是:8346"
注:上述代碼中使用了非本章函式 sys.alert
封裝範例 2
-- 取絕對路徑的文件名
function str_strip_dirname(path)
local d = string.split(path, '/')
return d[#d]
end
-- 取絕對路徑的目錄
function str_strip_filename(path)
local d = string.split(path, '/')
d[#d] = nil
return table.concat(d, '/')
end
-- 剔除路徑最後一部分的擴展名(後綴名)
function str_strip_extension(path)
local d = string.split(path, '/')
local fnt = string.split(d[#d], '.')
d[#d] = fnt[1]
return table.concat(d, '/')
end
-- 獲取路徑最後一部分的擴展名(後綴名)
function str_get_extension(path)
local d = string.split(path, '/')
local fnt = string.split(d[#d], '.')
table.remove(fnt, 1)
return table.concat(fnt, '.')
end
sys.alert(str_strip_dirname("/private/var/mobile/Media/1ferver/lua/scripts/1.lua.xxt"))
-- 輸出 "1.lua.xxt"
sys.alert(str_strip_filename("/private/var/mobile/Media/1ferver/lua/scripts/1.lua.xxt"))
-- 輸出 "/private/var/mobile/Media/1ferver/lua/scripts"
sys.alert(str_strip_extension("/private/var/mobile/Media/1ferver/lua/scripts/1.lua.xxt"))
-- 輸出 "/private/var/mobile/Media/1ferver/lua/scripts/1"
sys.alert(str_get_extension("/private/var/mobile/Media/1ferver/lua/scripts/1.lua.xxt"))
-- 輸出 "lua.xxt"
sys.alert(str_strip_extension(str_strip_dirname("/private/var/mobile/Media/1ferver/lua/scripts/1.lua.xxt")))
-- 輸出 "1"
注:上述代碼中使用了非本章函式 sys.alert、table.concat
可能相關的範例 (將中英混合的文字爆開成一個個的字元,僅支援 UTF8 編碼文字)
-- 這不是使用 string.split 實現的例子
function text_explode(text)
local ret = {}
for p, c in utf8.codes(text) do
ret[#ret + 1] = utf8.char(c)
end
return ret
end
--
local t = text_explode('你好,XXTouch')
sys.alert(table.concat(t, '/')) -- 輸出 "你/好/,/X/X/T/o/u/c/h"
注:上述代碼中使用了非本章函式 sys.alert、table.concat、utf8.char、utf8.codes
更多範例
參考 本章末尾的綜合範例