-
Notifications
You must be signed in to change notification settings - Fork 0
/
10.pattern_match.lua
68 lines (64 loc) · 2.09 KB
/
10.pattern_match.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
--[[
10.1 请编写 个函数 split ,该函数接收两个 ,第一个参数是字符串,第二个
数是分隔符模式,函数的返回值 分隔符分割后的原始 符串中每一部分 序列
t = split (” a whole new wo ld ”,””)
-- t = {”a”,” whole ”,” new ”,” WO ld ”}
你编写 函数是如何处理空字符串 的呢 是, 空字符串究竟是空序 an empty
sequence ), 是一个具有空字符串的序列( a sequence with one empty string )呢?
--]]
local json = require("json")
function split(str, sep)
local result = {}
if not str or type(str) ~= "string" or str == "" then
return result
end
if type(sep) ~= "string" or sep == "" then
result[#result + 1] = str
return result
end
--判断separator
sep = sep or " "
local start, length = 1, #str
while start <= length do
local i, j = string.find(str, sep, start)
if not i or not j then
if start <= length then
local sep_str = string.sub(str, start, length)
if sep_str ~= "" then
result[#result + 1] = sep_str
end
end
break
end
local sep_str = string.sub(str, start, i - 1)
if sep_str ~= "" then
result[#result + 1] = sep_str
end
start = j + 1
end
return result
end
print(json.encode(split("1./2/3/4 / 67///", "/")))
--这个方法只适用于sep是单字符的情况
function split2(str, sep)
local result = {}
if not str or type(str) ~= "string" or str == "" then
return result
end
if type(sep) ~= "string" or sep == "" then
result[#result + 1] = str
return result
end
--判断separator
sep = sep or " "
string.gsub(str, string.format("(.*)%s(.*)", sep), function(s1, s2)
if s1 ~= "" then
result[#result + 1] = o
end
if s2 ~= "" then
result[#result + 1] = o
end
end)
return result
end
print(json.encode(split2("31251281272166", "12")))