Lua 模式匹配与正则表达式

2023-12-23

我现在正在学习lua。关于lua中的模式匹配,我在lua.org上的lua文档中找到了以下句子:

尽管如此,Lua 中的模式匹配是一个强大的工具,并且包含一些难以与标准 POSIX 实现匹配的功能。

由于我熟悉 posix 正则表达式,我想知道是否有任何常见示例,其中 lua 模式匹配比正则表达式“更好”——或者我是否误解了这个句子?如果有任何常见的例子:为什么模式匹配与正则表达式更适合?


与正则表达式相比,是否存在 lua 模式匹配“更好”的常见示例?

与其说是特殊的例子,不如说 Lua 模式比 POSIX 正则表达式具有更高的信噪比。通常更可取的是总体设计,而不是特定示例。

以下是有助于良好设计的一些因素:

  • 非常轻量级的语法,用于匹配常见字符类型,包括大写字母 (%u), 小数位 (%d)、空格字符 (%s) 等等。任何字符类型都可以使用相应的大写字母来补充,因此模式%S匹配任何非空格字符。

  • 引用极其简单且有规律。引用字符是%,因此它始终与字符串引用字符不同\,这使得 Lua 模式比 POSIX 正则表达式更容易阅读(当需要引用时)。引用符号始终是安全的,并且永远不需要引用字母,因此您可以按照该经验法则进行操作,而不必记住哪些符号是特殊元字符。

  • Lua 提供“捕获”并且可以返回多个捕获作为结果match称呼。这个接口比通过副作用捕获子字符串或具有必须询问才能找到捕获的某些隐藏状态要好得多。捕获语法很简单:只需使用括号。

  • Lua 有一个“最短匹配”-与“最长匹配”一起使用的修饰符*操作员。例如s:find '%s(%S-)%.'查找前面有空格、后面有点的最短非空格字符序列。

  • Lua 模式的表达能力与 POSIX“基本”正则表达式相当,无需交替运算符|。您要放弃的是“扩展”正则表达式|。如果你需要那么多的表达能力,我建议你一路走下去LPEG http://www.inf.puc-rio.br/~roberto/lpeg/这本质上以相当合理的成本为您提供了上下文无关语法的强大功能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Lua 模式匹配与正则表达式 的相关文章

随机推荐

  • UI MapView:用户位置注释仅在 iPad 中为白色而不是蓝色脉冲

    我已经使用地图有一段时间了 所以我了解显示用户位置所需的基础知识 map showsUserLocation YES also have the box checked in xib 设置位置管理器 CLLocationManager lo
  • 在循环中分配一个函数

    我试图为循环中的每个元素分配一个函数 我希望函数使用变量的值 但它们使用变量的最后一个值 assign instrumentslist function for instList in lists instruments assign pa
  • 如何设置 Content-Disposition 标头中包含空格的文件名

    我有这段代码 resp addHeader Content Disposition inline filename fileName 当文件名是 a b c doc 或 abc doc 时 下载文件的名称会正确显示 然而 当文件名是 ab
  • 如何在用户点击时触发 setInterval 函数?

    我正在尝试编写一个 JS 计时器 该计时器将由用户单击 id start 的按钮触发 我已经让计时器本身正常工作 但是当我尝试添加代码以在按钮单击 id start 上启动计时器时 我破坏了它并且不确定为什么 任何帮助将不胜感激 这是JS代
  • 资源 已使用链接预加载进行预加载,但在窗口加载事件后几秒钟内未使用

    在我正在开发的网站上 我在外部服务器上托管了一些字体 在我的 我正在预加载字体 然后获取包含所有字体的样式表 font face字体的规则 样式表与字体位于同一服务器上 我遇到的问题是字体似乎已再次加载after样式表被加载 根本不使用预加
  • VS2022 net6.0在哪里存储ProjectGuid?

    刚刚开始使用 VS2022 和新的 csproj 格式 在旧格式中 每个项目都有这样的内容 Properties AssemblyInfo cs assembly Guid e8151094 eb82 46bd 9809 523d4a4fc
  • 除了“更改列表”视图之外,是否有办法让自定义 Django 管理操作显示在“更改”视图上?

    我认为无论出于何种原因 这都很容易做到 但我更深入地研究 似乎没有直接的方法允许用户在实例的 更改 视图上执行自定义管理操作 即 当您只是查看编辑时 屏幕显示单个实例 而不是实例列表 我是否忽略了一种简单的方法来做到这一点 或者是我覆盖管理
  • 同一文件上的多个 Arrow CSV 读取器返回 null

    我正在尝试使用多个 Goroutine 读取同一个文件 其中每个 Goroutine 都被分配一个字节来开始读取 并指定要读取的行数lineLimit 当文件适合内存时 我成功地通过设置csv ChunkSize的选项chunkSize多变
  • 如何从 Kotlin 运行 PowerShell 脚本?

    如何使用 Kotlin 运行 Powershell 脚本 我尝试移植在 StackOverflow 上找到的一些 Java 代码 但无法让它工作 我还尝试了以下方法 Runtime getRuntime exec powershell ex
  • 与 matlab 相比,fftw/c++ 计算 fft 是错误的

    我正在尝试使用 C 进行 fftw 我想测试一下它是否正常工作 我实现了一个简单的 ifft fft shift data data 0 测试一下 完全失败 测试数据是一个矩形函数 幅度和相位为1 用于比较的matlab代码与相同的测试完美
  • perl6如何获取promise的具体身份?

    我正在尝试编写在 Promise 中运行的 3 个 echo 服务器的代码 但我想知道哪个 Promise 正在执行回显 有没有办法做到这一点 no strict for 0 2 gt index result index start my
  • 用新文件替换旧文件

    我正在尝试编写一个脚本来用新文件内容替换旧文件内容 新文件内容以以下格式显示 旧文件 something txt新文件 something txt new 旧文件需要替换为新文件内容新文件名要重命名而不用新名称旧文件需要删除 下面的脚本不起
  • 在没有条件比较的情况下以数学方式查找最大值

    更新 到目前为止 codymanix 和 Moonshadow 提供了很大的帮助 我能够使用方程解决我的问题 而不是使用右移除以 29 因为使用 32 位有符号 2 31 溢出到 29 这有效 PHP 原型 r x x y x y 29 L
  • 内部类必须引用封闭类吗?

    我有一个内部类 非静态 它在初始化时使用对封闭类的引用 内部类现在会保留对封闭类的引用吗 class Enclosing class Inner private final ABC innerField outerField compute
  • 简化多重回波

    我在选择菜单中有完整的时区列表 如下所示
  • 在 Angular >=6 模板中扩展元素的属性

    我的代码中有这个 Component selector generic input template div div
  • 客户端脚本中的图像亮度检测

    有谁知道是否有一个脚本可以使用客户端脚本来检测图像 包括 HTML 中的暗度 亮度 我基本上希望能够检测背景中使用的图像的亮度 暗 亮 并让 CSS HTML jQuery JS 根据暗或亮 真或假 的变量来调整页面 我知道有可用的服务器端
  • 与react和express(nginx,docker)建立网络套接字通信

    尝试设置 websocket 连接 当我在本地主机环境中时它工作正常 但是一旦我设置了 docker 环境 客户端 react 就很难与 Express 建立 web socket 通信 我应该定义什么网址才能在两者之间打开网络套接字 我试
  • 使用 Python 将 .doc 转换为纯文本

    我正在尝试使用 texttract 将我的 doc 文件转换为纯文本 import textract text textract process path to file extension 但我收到这个错误 AttributeError
  • Lua 模式匹配与正则表达式

    我现在正在学习lua 关于lua中的模式匹配 我在lua org上的lua文档中找到了以下句子 尽管如此 Lua 中的模式匹配是一个强大的工具 并且包含一些难以与标准 POSIX 实现匹配的功能 由于我熟悉 posix 正则表达式 我想知道