我现在正在学习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(使用前将#替换为@)