【问题标题】:Lua: Regex and Lua PatternsLua:正则表达式和 Lua 模式
【发布时间】:2021-05-21 16:15:35
【问题描述】:
local code = [[
client_script 'Bait.lua'

client_script 'Test.lua' --Test
]]

我将如何制作一个正则表达式/模式来获取 client_script '' --Test 之间的所有内容

【问题讨论】:

  • code:match"client_script%s*'([^\n]+)'%s*%-%-Test"
  • 下次最好先分享一些自己的想法。这不是编码服务或在线 Lua 模式生成器。使用 Lua 参考手册可以在几分钟内轻松解决此问题,即使您之前对模式一无所知

标签: lua lua-patterns


【解决方案1】:

code 似乎是 Lua 代码,因此如果使用等效但不同的代码段(" 而不是 '、括号、换行符、多行 cmets,则任何基于模式的解决方案都将失败等等。)。为什么不将其解析为 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)()

原因是loadloadstring在5.2中合并了,访问环境只定义为访问_ENV变量,所以函数没有附加特定的环境了。

【讨论】:

    猜你喜欢
    • 2023-03-22
    • 2018-02-07
    • 2019-01-23
    • 2017-05-14
    • 2014-08-26
    • 1970-01-01
    • 2021-09-11
    • 2022-01-11
    • 2020-06-14
    相关资源
    最近更新 更多