使用 LPeg 使 Lua 模式不区分大小写

Sto*_*omp 2 lua case-insensitive pattern-matching lua-patterns lpeg

我有一个应用程序(除其他外)支持纯文本搜索和使用 Lua 模式的搜索。为了方便起见,该应用程序支持不区分大小写的搜索。这是一个图像片段:

(

将给定 Lua 模式转换为不区分大小写的 Lua 模式的代码不太漂亮。它主要关心字符前面是否有奇数或偶数转义符 (%) 以及它是否位于方括号内。图像中显示的图案变为%a[bB][bB]%%[cC][%abB%%cC]

我还没有机会学习 LPeg,我想这可能是我的动力。

我的问题是,这是否是 LPeg 可以轻松处理的事情?

His*_*H M 5

是的,但是为了更轻松地进入 LPeg 世界,请考虑 LPeg 的“re”模块,它为您提供类似正则表达式的语法,并且您可以指定一组规则,就像在语法中一样(想想 Yacc 等)。您基本上会为转义字符、括号组和常规字符编写规则。然后,您可以将函数与规则相关联,这将发出它们作为输入使用的相同文本或不区分大小写的修改版本。

规则的结构将自动处理奇偶区分、括号上下文等。 LPeg 使用“有序选择”,因此如果您首先添加转义规则,它将正确处理 %[ 并避免将其与例如,括号规则。