LUA错误“模式太复杂”-桌面模拟器

我有一个字符串,我试图使用 LUA 模式匹配从中提取一个特定的部分。我将其保存为正则表达式,您可以看到here,以及提取我想要的确切部分(绿色捕获组)的字符串和正则表达式语法。

我有一个字符串,我试图使用 LUA 模式匹配从中提取一个特定的部分。我将其保存为正则表达式,您可以看到here,以及提取我想要的确切部分(绿色捕获组)的字符串和正则表达式语法。

result = {string.match(description, "Weapons.-\n(.*)\n\n")}

但是它错误地说“模式到复杂”。奇怪的是,我试图解决这个问题,因为我认为我在转换中犯了一个错误,如果我删除最后一个\n它确实起作用,但它也捕获了能力部分,这是不可取的。我认为我的语法是正确的,因为当我删除\n时,它们也从正则表达式中删除了什么

我有很多不同的方式,我得到一些奇怪的结果,所以我开始认为这是 LUA 本身的错误。

我想指出的一个额外的事情可能会有所帮助,那就是我在 Tabletop Simulator 中这样做,我相信它使用 Moonsharp(这是一个 LUA 解释器)。

Thanks,

1

我有很多不同的方式,我得到一些奇怪的结果,所以我开始认为这是 LUA 本身的错误。

这似乎是底层MoonSharp implementation的错误。正如已经在评论中指出的那样,您的模式在使用 PUC Lua 5.3 实现的大型输入字符串上运行得很好:

> description = "[-]Weapons" .. ("."):rep(1e6) .. "\n" .. ("."):rep(1234567) .. "\n\n[-]More Stuff" .. ("."):rep(1e7)
> #string.match(description, "Weapons.-\n(.*)\n\n")
1234567

考虑到 MoonSharp 的不可靠的模式实现(代码似乎端口 Lua 实现,但我认为他们忘记了增量matchdepth当函数返回时),我会实现这个匹配没有模式通过循环在行或使用找到模式项目find(不使用模式,虽然)。

以下函数对固定模式"Weapons.-\n(.-)\n\n"执行此操作。请注意,为了防止模式匹配,如何将所有find调用的最后一个参数设置为true

local function extract_weapons(description)
    local _, end_weapons = description:find("Weapons", 1, true)
    if not end_weapons then return end
    local _, end_newline = description:find("\n", end_weapons + 1, true)
    if not end_newline then return end
    local start_newlines = description:find("\n\n", end_newline + 1, true)
    if not start_newlines then return end
    return description:sub(end_newline + 1, start_newlines - 1)
end
0

您可以使用

result = s:match("Weapons.-\n(.-)\n\n")
See theonline Lua demo.Details: Weapons-a word

.--任何零个或多个字符,尽可能少

\n-换行符

(.-)-第 1 组:任何零个或多个字符,尽可能少

\n\n-两个换行符。

0

所以,对于任何其他可能遇到这个问题的人,这里是修复和为什么会发生。

正如其他人所说,这确实是由于 Tabletop Simulator 的 LUA 解释器中的一个错误。TTS 不使用本地 LUA,而是使用名为 MoonSharp v2.0 的解释器。这个版本有这个错误,似乎当你的正则表达式(pattern)匹配一个长字符串时,它是错误的。只是想强调最后一句话-它不是你正在解析的字符串,因为有这个限制

解决方法是放入一个解决方法。我首先将较大的字符串 (参见上面的 regex 链接的字符串示例) 拆分为单独的行,并与它们创建一个数组 (LUA 中的一个表)。然后,我通过循环遍历数组中的每个项目并连接它们来重建原始字符串。在循环中,我将有一个 if 语句,它查找字符串“Abilities”,一旦匹配,它将退出原工作减号。

代码片段在这里,所以你可以看到它的要点:

--this first line gets the data you see in the regex I listed above
local weaponSection = {string.match(description, "Weapons.-\n(.*)\n")}
-- Because Moonsharp regex is bugged we have to split the entire weapon section string  into subcomponents then rebuild it
    local temptable = {}
    local rebuiltWeaponSection = ""
    -- split the larger string into line by line, then insert into array - this bring "abilities" section across which we don't want and can't exclude due to bug explained above
        for weapon in string.gmatch(weaponSection[1], ".-\n") do
            table.insert(temptable, weapon)
        end
        -- now loop through the array and concat each line to a new string
        for _, weapon in ipairs(temptable) do
            -- this if statement looks for the abilities line and then exits loop when he sees it. this ultimately ends up rebuilding it all without the abilities section
            if string.match(weapon, "Abilities") then
                break
            else
                rebuiltWeaponSection = rebuiltWeaponSection .. weapon
            end
        end

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(25)
如何在 python中安装一个阶跃函数
上一篇
如何在 python中安装一个阶跃函数
下一篇

相关推荐

  • Lua正则匹配:如何在Lua中编写这个正则表达式

    关于Lua正则匹配的问题,在lua pattern matching中经常遇到,我是 Lua 正则表达式等价功能的新手,我需要编写以下正则表达式,它应该将数字与小数匹配…

    2022-12-07 10:43:47
    0 38 45
  • LUA错误“模式太复杂”-桌面模拟器

    我有一个字符串,我试图使用 LUA 模式匹配从中提取一个特定的部分。我将其保存为正则表达式,您可以看到here,以及提取我想要的确切部分(绿色捕获组)的字符串和正则表达式语法。…

    2022-12-28 02:12:04
    0 51 86
  • Lua脚本学习:LuaRobloxgui脚本

    关于Lua脚本学习的问题,在limited words script roblox中经常遇到,当您坐在汽车座椅上时,我制作了一个 GUI,它会告诉您带有“购买”按钮的汽车的速度和价值。我设法只制作了 GUI,但我找不到编写脚本的方法,因此当您单击“购买”时,它会将玩家购买的汽车传送到经销商的后面。无论如何要做吗?…

    2022-11-23 13:17:01
    0 18 56
  • Lua获取时间:Lua-以毫秒为单位的当前时间(lua time)

    关于Lua获取时间的问题,在lua time中经常遇到,有没有一种常见的方法来获取当前时间或毫秒?…

    2022-12-14 11:12:03
    0 29 70
  • 家用热水循环系统:我在robloxlua做一个不同地方的循环系统 我该如何开始

    关于家用热水循环系统的问题,在how to make a round system in roblox studio中经常遇到,关于我在robloxlua做一个不同地方的循环系统 我该如何开始的编程代码示例如下。…

    2022-12-10 13:14:52
    0 51 86
  • php hash加密使用PHP Hash加密保护您的数据

    示例示例php hash加密是一种使用hash函数将明文转换为密文的加密技术,它可以使数据更加安全。php中提供了很多hash函数,如md5、sha1等,可以用于对字符串进行加密。…

    2023-01-19 03:10:35
    0 63 93
  • 链接打开小程序:如何仅在y轴上打开小刻度matplotlib

    关于链接打开小程序的问题,在pyplot minor ticks中经常遇到,我怎样才能把小蜱只在 y 轴上的线性与线性图?…

    2022-12-08 08:29:16
    0 79 58
  • Alter table:ALTER TABLE添加约束

    关于Alter table的问题,在add constraint mysql中经常遇到,表用户和属性已正确创建…

    2022-12-21 12:32:50
    0 43 58

发表评论

登录 后才能评论

评论列表(74条)