用分隔符规则分割一个字符串 (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.alerttable.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.alerttable.concatutf8.charutf8.codes

更多示例

本章最后

results matching ""

    No results matching ""