Lua:在长字符串中进行快速多个替换
2018-11-16 4:46:19
收藏:0
阅读:263
评论:1
我有一个
- 一组模式/替换对
- 一个要进行替换的长字符串(几千字节甚至几兆字节)。
所有模式的所有出现都必须被它们对应的替换文本替换。每个模式在字符串中可能存在多次。
目前,我通过迭代模式/替换对列表并每次使用 string.gsub 来实现:
for _, pattern, replace in iter(replace_patterns) do
body = body:gsub(pattern, replace)
end
( iter 是一个辅助函数,用于更好地迭代模式。)
问题:这是最好的做法吗?我担心这样效率低下,因为每次调用 gsub 都会扫描整个长字符串。
P.S. 我阅读了 https://stackoverflow.com/a/12865406/5005936(帮助我减少了字符串的使用等)和 https://stackoverflow.com/a/38422229/5005936(但我不想在此上下文中编写本地代码...)
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

以下是你可能想要尝试的一些事情(你将不得不在你的字符串上运行一些基准测试,以查看哪种方法最好):
find代替gsub,因为它需要起始位置,这允许避免为每个模式重新扫描相同(长)的字符串。table.concat来将最终字符串连接在一起;本质上,使用find来获取替换开始的位置并切割(子)字符串来填充表格,其中包含替换和它们之间的字符串。然后将结果连接在一起,以获得所需的字符串。你将不得不运行测试,因为不知道模式的数量和每个模式的替换大约有多少,难以给出一些合理的建议。