구분자 규칙으로 문자열 분할 (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을 사용합니다.
추가 예제
이 장 끝의 종합 예제를 참조하십시오.