local code = [[
client_script 'Bait.lua'
client_script 'Test.lua' --Test
]]我如何创建一个接受client_script '和' --Test之间的所有内容的正则表达式/模式
发布于 2021-02-19 22:05:05
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这将解析并加载代码,但是使用具有不同client_script定义的newenv作为环境来存储值。请注意,FiveM还使用了client_scripts和其他几个必须提供的函数(但大多数函数可以简单地指定为function()end)。
此外,上面的代码只适用于Lua 5.2和更高版本。Lua5.1的不同之处在于load的代码行,必须将其更改为:
setfenv(loadstring(code), newenv)()原因是在5.2中合并了load和loadstring,并且访问环境仅定义为访问_ENV变量,因此不再有特定的环境附加到函数。
https://stackoverflow.com/questions/66264574
复制相似问题