Lua 模式匹配 vs 正则表达式
众所周知,Lua 遵循的模式匹配的设计有很大的不同,那么一般基于POSIX的正则表达式设计。
它们的共同点很少,更流行的方法是两者中的POSIX,因为它在示例变得更复杂时效果很好并且可以处理各种情况,但这并不意味着 Lua 的模式匹配不好。事实上,它更容易理解,而且它也很有魅力。
Lua字符串库没有使用正则表达式,而是在语法匹配中使用了一组特殊的字符。两者可能非常相似,但 Lua 模式匹配更受限制并且具有不同的语法。
虽然很容易理解在某些情况下 POSIX 设计比 Lua 的模式匹配更好,但在以下几点中,我将尝试讨论为什么 Lua 的模式匹配设计也更可取。
考虑以下几点 -
引用是非常简单和有规律的。引用字符是 %,所以它总是与字符串引用字符 \ 不同,这使得 Lua 模式比 POSIX 正则表达式更容易阅读(当需要引用时)。
Lua 有一个“最短匹配” - 修饰符与“最长匹配” * 运算符一起使用。因此,例如 s:find '%s(%S-)%:' 查找以空格开头并后跟冒号的非空格(不匹配)字符的最短序列。
Lua 提供“捕获”并且可以作为匹配调用的结果返回多个捕获。这个接口比通过副作用捕获子字符串或具有一些必须被询问才能找到捕获的隐藏状态要好得多。您可以使用括号捕获语法。
模式匹配的语法非常轻量级,常见的字符类型包括大写字母(%u)、十进制数字(%d)、空格字符(%s)等。任何字符类型都可以使用相应的大写字母进行补充,因此模式 %S 匹配任何非空格字符。
还有 %bxy 匹配一对平衡的分隔符,例如括号或大括号。在 POSIX 正则表达式中无法进行平衡括号匹配。
综上所述,Lua的模式匹配模型绝对是一个值得使用的工具。
以上是 Lua 模式匹配 vs 正则表达式 的全部内容, 来源链接: utcz.com/z/341463.html