lua拆分字符串实现及lua源码查看
2015-01-29 14:56
661 查看
lua字符串拆分实现
开始实现的时候,遇到一个问题,如果用 "++" 这样的特殊字符作为token发现,string.find有问题(遇到"+"也会返回,而不是遇到"++")
在网上查了一下,也没查到什么,既然有lua的源代码为什么不去看下,要检讨啊
后面查看lua 源代码的 lstrlib.c文件(这个是 lua string库的源代码), 发现string.find代码中有特殊字符检查,对特殊字符进行处理,所以导致了这个错误,
不过string.find函数可以传入 第4个参数 传入true 就能绕过特殊字符检查。所以就没问题了。
如果想查看lua的源代码,查看 l*lib.c 文件。 如: ltablib.c 就是 table的库代码 liolib.c 就是io文件操作的库代码
两个token的情况,取出两个token的内容 处理格式 “反倒是第三代[#%dsfsdffsdsf%#]水电费水电费水电费”
经各种测试方法可靠
lua对string处理,有个模式匹配去查找字符串的方式(其实就是 正则表达式),里面有几个魔法字符,这个几个魔法字符,是不能作为查找的token
假如我们的token是上面魔法字符,我们需要用 % 来转义, 不过+号 和 -号可以不用转义
--字符串分割 function splitStr(content, token) if not content or not token then return end local strArray = {} local i = 1 local contentLen = string.len(content) while true do -- true是用来避开string.find函数对特殊字符检查 特殊字符 "^$*+?.([%-" local beginPos, endPos = string.find(content, token, 1, true) if not beginPos then strArray[i] = string.sub(content, 1, contentLen) break end strArray[i] = string.sub(content, 1, beginPos-1) content = string.sub(content, endPos+1, contentLen) contentLen = contentLen - endPos i = i + 1 end return strArray end
开始实现的时候,遇到一个问题,如果用 "++" 这样的特殊字符作为token发现,string.find有问题(遇到"+"也会返回,而不是遇到"++")
在网上查了一下,也没查到什么,既然有lua的源代码为什么不去看下,要检讨啊
后面查看lua 源代码的 lstrlib.c文件(这个是 lua string库的源代码), 发现string.find代码中有特殊字符检查,对特殊字符进行处理,所以导致了这个错误,
不过string.find函数可以传入 第4个参数 传入true 就能绕过特殊字符检查。所以就没问题了。
如果想查看lua的源代码,查看 l*lib.c 文件。 如: ltablib.c 就是 table的库代码 liolib.c 就是io文件操作的库代码
两个token的情况,取出两个token的内容 处理格式 “反倒是第三代[#%dsfsdffsdsf%#]水电费水电费水电费”
经各种测试方法可靠
function split(message, token1, token2) if not message then return end local msgTab = {} local begnum, endnum local _token = 1 while true do if _token == 1 then begnum, endnum = string.find(message, token1, 1) _token = 2 else begnum, endnum = string.find(message, token2, 1) _token = 1 end if not begnum then msgTab[#msgTab+1] = message break end if begnum ~= 1 then --为空不加入 msgTab[#msgTab+1] = string.sub(message, 1, begnum-1) end message = string.sub(message, endnum+1) end return msgTab end
lua对string处理,有个模式匹配去查找字符串的方式(其实就是 正则表达式),里面有几个魔法字符,这个几个魔法字符,是不能作为查找的token
( ) % + - * ? [ ] ^ $ --这些是魔法字符 不能作为token
假如我们的token是上面魔法字符,我们需要用 % 来转义, 不过+号 和 -号可以不用转义
local mssg = split(self.message, "%[#%%", "%%#%]") --第一个token是 [#% 第二个token是 %#]
相关文章推荐
- Lua中字符串类型的源码实现
- Lua源码中字符串类型的实现
- 把文件以二进制格式或base64字符串形式保存到数据库中,并实现下载功能源码
- Visual Basic Base64编码源码:可实现对字符串(中文)和二进制文件编码
- 反转指向字符串反转C++实现源码(带测试用例)
- 字符串逆序(lua实现)
- 源码1 禁用拷贝构造函数 重载=运算符,以禁用=赋值 字符串拆分
- 妙用 T-SQL: PARSENAME 函数 (也可不使用该函数,鸣谢"小杰") 实现按指定分隔符拆分字符串 SplitString
- JAVA中实现多个分隔符拆分字符串
- php strrpos 字符串查找函数内部源码实现
- 字符串拆分的实现(希望能帮到你)
- 不使用库函数,实现字符串操作源码
- 分享实用工具源码--实现Windows IDE中查看Linux下编译信息
- C++拆分字符串代码(实现split)
- Lua里实现将table转成字符串(序列化)和将字符串转换回table(反序列化)
- php strpos 字符串查找函数内部源码实现
- 教你如何实现SQL下的字符串拆分
- ABAP中拆分字符串到内表,然后再遍历的实现方法
- oracle 拆分逗号分隔字符串 实现split
- php stripos 字符串查找函数内部源码实现