gpt4 book ai didi

regex - 纯 Lua 中功能齐全的正则表达式库

转载 作者:行者123 更新时间:2023-12-04 15:50:22 32 4
gpt4 key购买 nike

我正在编写一个上古卷轴在线插件,它由一个名为 Havok Script 的轻微修改的 Lua 5.1 引擎支持。 .这个Lua环境不允许访问os , io , package , debug模块或任何 native 平台绑定(bind),并且无法绕过此限制,因为 ESO 是专有软件。

在这个受限制的环境中,我需要一个功能完整的正则表达式引擎,具有环视功能(消极和积极的前瞻和后视)。性能几乎无关紧要,但最重要的是方便(我没有时间或能力编写自己的正则表达式引擎)。

正则表达式引擎的实际语法不如功能集重要。因此,PCRE、JS regex、Java regex 或 .NET regex 引擎,上述任何一种或什至稍有不同的东西,都可能没问题。 POSIX 太简单了,因为它不支持任何环视行为。

正则表达式将是未经验证的用户输入,但环境实际上是一个沙箱,因此用户无法对它们进行任何恶意操作。由于输入是用户输入,我不能“仅仅”使用 LPEG 之类的东西;用户群绝对反对必须学习像 LPEG 这样的全新概念,而不是相对熟悉的正则表达式语法。

在寻找 Lua 正则表达式引擎时,我已经用尽了许多选项:

  • 绑定(bind)到本地平台,如 lregexp 和其他 libpcre Lua 绑定(bind)。这些绝对不会也永远无法用于我的用例,因为环境无法访问 native 平台,因此它们已被淘汰。
  • reLua ,它支持基本的“常规”模式,如交替和贪婪闭包,但绝对没有环视行为。我没有能力向这个项目添加环视,所以除非存在一个添加了它的叉,否则我不能使用它。
  • 使用 caSTL 将用纯 JavaScript 实现的完整正则表达式引擎(不使用 JS 的内置正则表达式函数)转换为 Lua。这有点有希望,但我打了 fatal flaw在caSTL,显然还有tessel ,因为 Lua 人为地将每个范围的变量限制为 200,而这些转译器没有任何方法可以解决这个问题(他们必须做的是将一个局部变量声明为一个表并将所有数据填充到该表中)表,然后将原来JS中的所有引用从局部变量访问改为Lua中的表访问)。因为这是一个如此基本的问题,我不确定这是否可行,但也许最接近解决方案的是尝试通过以某种方式解决这个问题来解决这个问题?
  • 我一直在寻找来自 JS 之外的其他语言的转译器,但我没有找到。基本上,我能找到的唯一“X 语言转化为纯 Lua”编译器是 caSTL 和 tessel。
  • 我也(绝望地)尝试转译一个最新的,emscriptened libpcre (对于初学者:C 代码编译为 JS)然后使用 caSTL 将其转换为 Lua。这会导致在运行代码时出现更奇怪的 Lua 错误,其中 Lua 解释器找不到它被要求提供给 goto 的标签。 ,尽管该标签清楚地存在于代码中。我只能认为这是因为生成的代码是如此之大,以至于 Lua 只是放弃了寻找它的尝试。

  • 此刻我陷入了僵局;我不知道如何继续获得我想要的功能。是否有一个库确实为我还没有找到的 Lua 提供了一个纯 Lua、功能齐全的正则表达式引擎?我放弃了谷歌的第七页或第八页。

    最佳答案

    根据您的确切要求,您可以尝试使用 re module LPEG 的。明显的优势是它基本上在 Lua 可用的任何地方都可用。另一方面,您必须记住,这是正则表达式的独立实现,因此与例如不兼容POSIX。但是,只要表达式足够简单,您就不会注意到。

    关于regex - 纯 Lua 中功能齐全的正则表达式库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54092273/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com