如何解决Lua:正则表达式和 Lua 模式
local code = [[
client_script 'Bait.lua'
client_script 'Test.lua' --Test
]]
我将如何制作一个包含 client_script '
和 ' --Test
之间的所有内容的正则表达式/模式
解决方法
code
似乎是 Lua 代码,因此如果使用等效但不同的代码段("
而不是 '
,括号,行),任何基于模式的解决方案都将失败中断、多行注释等)。为什么不把它解析为 Lua?
local code = [[
client_script 'Bait.lua'
client_script 'Test.lua' --Test
]]
local scripts = {}
local newenv = {
client_script = function(name)
table.insert(scripts,name)
end
}
load("local _ENV=...;"..code)(newenv)
for i,v in ipairs(scripts) do
print(v)
end
这会解析并加载代码,但使用 newenv
作为环境,并使用不同的 client_script
定义来存储值。请注意,FiveM 还使用了 client_scripts
和一些其他必须存在的函数(但其中大部分可以简单地指定为 function()end
)。
此外,上述代码仅适用于 Lua 5.2 及更高版本。 Lua 5.1 的不同之处在于带有 load
的那一行,必须改成这样:
setfenv(loadstring(code),newenv)()
原因是 load
和 loadstring
在 5.2 中合并了,访问环境只定义了访问 _ENV
变量,所以没有附加特定的环境一个函数了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。