lua拆分字符串实现及lua源码查看
来源:互联网 发布:清梦繁华冢 知乎 编辑:程序博客网 时间:2024/06/04 23:24
lua字符串拆分实现
--字符串分割 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 strArrayend
开始实现的时候,遇到一个问题,如果用 "++" 这样的特殊字符作为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 endlocal msgTab = {}local begnum, endnumlocal _token = 1while true do if _token == 1 thenbegnum, endnum = string.find(message, token1, 1)_token = 2elsebegnum, endnum = string.find(message, token2, 1)_token = 1endif not begnum thenmsgTab[#msgTab+1] = messagebreakendif begnum ~= 1 then --为空不加入msgTab[#msgTab+1] = string.sub(message, 1, begnum-1)endmessage = string.sub(message, endnum+1)endreturn msgTabend
lua对string处理,有个模式匹配去查找字符串的方式(其实就是 正则表达式),里面有几个魔法字符,这个几个魔法字符,是不能作为查找的token
( ) % + - * ? [ ] ^ $ --这些是魔法字符 不能作为token
假如我们的token是上面魔法字符,我们需要用 % 来转义, 不过+号 和 -号可以不用转义
local mssg = split(self.message, "%[#%%", "%%#%]") --第一个token是 [#% 第二个token是 %#]
1 0
- lua拆分字符串实现及lua源码查看
- Lua中字符串类型的源码实现
- lua拆分字符串not enough memory
- Lua字符串及字符串匹配
- Lua字符串及字符串匹配
- lua源码阅读(3)----字符串
- 字符串逆序(lua实现)
- lua实现模版字符串替换
- 实现lua 字符串spllit功能
- lua实现KMP字符串匹配。
- Lua源码阅读三——lua字符串缓存
- Lua源码Lua编译库及解释器、编译器编译
- Lua 字符串
- Lua 字符串
- Lua基础---lua字符串库函数详解,实例及正则表达式
- lua源码学习(二)lua的lapi.c实现
- Lua中的正则表达式及源码分析
- Lua中数据类型的源码实现
- servlet的定义及其生命周期
- TCPIP-socket 记录
- ffmpg命令
- 11个强大的Visual Studio调试小技巧
- 按照(字典序)排序小计
- lua拆分字符串实现及lua源码查看
- 照片保存到相册,并添加到自定义相册中
- C/C++学习:慎用static变量
- 一个开始
- Java 正则截取两个标签之间字符串
- cocos2dx android apk 在模拟器上运行失败
- Cocos2d-x中 发起http请求
- C语言:内存字节对齐详解[转载]
- UNIX环境C语言编程(5)-系统数据文件