Lua模式匹配的括号和0或1次出现。

我正在尝试将一个字符串与一个模式匹配,但有一件事我还没有弄清楚。在正则表达式中,我会这样做:

字符串:
en
eng
engl
engli
englis
english

模式:
^en(g(l(i(s(h?)?)?)?)?)?$

我想让所有字符串匹配。 在 Lua 模式匹配中,我无法使其正常工作。

即使像这样更简单的例子也无法正常工作:

字符串:
fly
flying

模式:
^fly(ing)?$

有人知道如何做吗?

点赞
用户50476
用户50476

在 Lua 中,使用量词 ?*+- 无法使匹配组变为可选的(或重复的)。

在模式 (%d+)? 中,问号“失去”了它的特殊含义,只会简单地匹配字面上的 ?,可以通过执行以下代码行来查看:

text = "a?"
first_match = text:match("((%w+)?)")
print(first_match)

输出如下:

a?

据我所知,在 Lua 中,最接近的方法是使用模式:

^eng?l?i?s?h?$

这也会匹配像 "enh""enls" 等字符串。

2012-07-06 14:53:00
用户501459
用户501459

在 Lua 中,括号仅用于捕获,而不会创建原子。

您可以使用以下最接近您想要的模式:

'^flyi?n?g?$'
'^en?g?l?i?s?h?$'

如果您需要完整的正则表达式引擎功能,则可以使用与 Lua 相关的常见引擎绑定。还有 LPeg,一个用于创建 PEGs的库,并附带一个正则表达式引擎作为示例(不确定它的强大程度)。

2012-07-06 14:54:10