关于字符串的分割,是一个非常非常常用的功能,笔者也很纳闷,LUA官方为何不在string库里予以支持?
抱怨归抱怨,但问题还得解决,只能自己实现了。网上很多实现,但千篇一律,都不支多个字符分割且含有特殊字符的分割!
比如: “abcxa.cxcba”,按“a.c”分割,那么网上绝大多数的实现是无法完成的,原因是“.”在lua字符串处理时,是一个特殊字符,需要转义。
于是,笔者自己写了一段代码,优先对特殊字符进行转义,可以满足任意非空字符串分割符。实现如下:
-
split = function(str, sep)
-
if str == nil or str == "" or sep == nil or sep == "" then
-
return nil, "string and delimiter should NOT be empty"
-
end
-
-
local pattern = sep:gsub("[().%+-*?[^$]", "%%%1")
-
local result = {}
-
while str:len() > 0 do
-
local pstart, pend = string.find(str, pattern)
-
if pstart and pend then
-
if pstart > 1 then
-
local subcnt = str:sub(1, pstart - 1)
-
table.insert(result, subcnt)
-
end
-
str = str:sub(pend + 1, -1)
-
else
-
table.insert(result, str)
-
break
-
end
-
end
-
return result
-
end
代码写得比较直白(原始),各位看官自行优化。
阅读(2818) | 评论(0) | 转发(0) |