Lua中的 'plain' string.gsub指的是在字符串中进行模式匹配并替换的函数。它使用简单的模式匹配规则,可以直接匹配原始字符串中的字符,与正则表达式不同。
2013-9-18 14:48:36
收藏:0
阅读:268
评论:3
我在字符串解析中遇到了小问题。我有一个字符串:
footage/down/temp/cars_[100]_upper/cars_[100]_upper.exr
但是我使用 gsub 删除字符串的一部分时遇到了困难。通常我会这么做:
lineA = footage/down/temp/cars_[100]_upper/cars_[100]_upper.exr
lineB = footage/down/temp/cars_[100]_upper/
newline = lineA:gsub(lineB, "")
这通常会给我 'cars_[100]_upper.exr'
问题在于 gsub 不喜欢字符串中的 [] 或其他特殊字符,并且与 string.find 不同,gsub 没有使用 'plain' 标志取消模式搜索的选项。
我无法手动编辑行以包括特殊字符的转义字符,因为我正在进行文件比较脚本。
任何帮助让我从 lineA
到 newline
,并使用 lineB
,都将不胜感激。
原文链接 https://stackoverflow.com/questions/1745448
点赞
stackoverflow用户126042
从《Programming in Lua 2e》的第181页摘录:
这些特殊字符是:
( ) . % + - * ? [ ] ^ $
字符“%”被用来转义这些特殊字符。
因此,我们可以编写一个简单的函数来转义这些特殊字符,然后将其应用到您的输入字符串(lineB
)上:
function literalize(str)
return str:gsub("[%(%)%.%%%+%-%*%?%[%]%^%$]", function(c) return "%" .. c end
end
lineA = "footage/down/temp/cars_[100]_upper/cars_[100]_upper.exr"
lineB = literalize("footage/down/temp/cars_[100]_upper/")
newline = lineA:gsub(lineB, "")
print(newline)
当然,结果会打印出:cars_[100]_upper.exr
。
2009-11-17 03:53:48
stackoverflow用户282843
你也可以在文本字符串str中转义标点符号,方法是使用:
str:gsub ("%p", "%%%0")
2012-11-19 13:25:43
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在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 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
你可以使用另一种方法,比如:
local i1, i2 = lineA:find(lineB, nil, true) local result = lineA:sub(i2 + 1)