lua拆分字符串实现及lua源码查看

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 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是  %#]


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值