Lua string.find() 错误
2017-3-16 21:14:52
收藏:0
阅读:92
评论:1
所以我正在编写一个 Lua 脚本并测试它,但我遇到一个错误,我不知道如何修复:
.\search.lua:10: malformed pattern (missing ']')
以下是我的代码。如果您知道我做错了什么,如果您能告诉我,那将非常有帮助。
weird = "--[[".."\n"
function readAll(file)
local c = io.open(file, "rb")
local j = c:read("*all")
c:close()
return(j)
end
function blockActive()
local fc = readAll("functions.lua")
if string.find(fc,weird) ~= nil then
require("blockDeactivated")
return("false")
else
return("true")
end
end
print(blockActive())
编辑:第一条评论给出了答案。我将
weird = "--[[".."\n" 更改为 weird = "%-%-%[%[".."\r" 因为本来就应该是 \r,而不是 \n。
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 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 代码?

这里的错误是因为
string.find使用了 Lua 模式。大多数非字母数字字符,如"[", ".", "-"等,都有特殊含义。string.find(fc,weird)或更好的fc:find(weird)尝试解析这些特殊字符,从而导致错误。但是你可以使用这些模式来取消其他模式,例如:
weird = ("--[["):gsub("%W","%%%0") .. "\r?\n"这可能有点令人生畏,但希望它有意义。
("--[[")是你的奇怪字符串的原始第一部分,按预期工作。:gsub()是一个函数,它将模式替换为另一个模式。再次查看 模式。"%W"是一种模式,匹配不是字母、数字或下划线的每个字符串。%%%0将与本身匹配的所有内容替换为它本身(%0是代表该匹配中的所有内容的字符串),后跟一个转义的%。这意味着
[[将变成%[%[,这就是find和类似的模式“转义”特殊字符的方式。现在,
\n变成了\r?\n,这回到了这些模式。如果以\n结尾,它将匹配它,就像以前一样。但是,如果在 Windows 上运行,换行可能会看起来像\r\n。(你可以在这里阅读更多信息。)在一个字符后面的?,在这种情况下,是\r,它表示它可以以任意方式匹配它。因此,这将匹配--[[\n和--[[\r\n,支持 Windows 和 Linux。现在,当你运行
fc:find(weird)时,它运行的是fc:find("%-%-%[%[\r?\n"),这应该是你想要的。希望这可以帮到你!
如果你有点懒的话,这是代码:
weird = ("--[["):gsub("%W","%%%0") .. "\r?\n" // 转义 "--[[",并添加一个换行符。用于我们的查找。 // readAll(file) // 以字符串作为输入,表示文件名,返回整个内容作为字符串。 function readAll(file) local c = io.open(file, "rb") // 打开一个由参数指定的文件。只读、二进制(不会自动格式化像 \r\n 这样的东西) local j = c:read("*all") // 将文件的内容转储到字符串中。 c:close() // 关闭文件,释放内存。 return j // 返回字符串的内容。 end // blockActive() // 如果在 'functions.lua' 中匹配到奇怪的字符串,则返回 true,否则执行 'blockDeactivated.lua'。 function blockActive() local fc = readAll("functions.lua") // 将 'functions.lua' 的内容转储到字符串中。 if fc:find(weird) then // 如果 functions.lua 有阻塞程序。 require("blockDeactivated") // 需要(因此执行,考虑使用 loadfile)'blockDeactived.lua'。 return false // 返回 false。 else return true // 返回 true。 end end print(blockActive()) // 测试一下 blockActve 代码。