7

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

Strings:
en
eng
engl
engli
englis
english

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

我希望所有字符串都匹配。在 Lua 模式匹配中,我无法让它工作。

即使是这样一个更简单的例子也行不通:

Strings:
fly
flying

Pattern:
^fly(ing)?$

有人知道怎么做这个吗?

4

2 回答 2

9

您不能使用 Lua 的量词?*和使匹配组成为可选(+或重复它们) -

在 pattern(%d+)?中,问号“失去”了它的特殊含义,并且将简单地匹配文字?,正如您通过执行以下代码行所看到的:

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

这将打印:

a?

AFAIK,你可以在 Lua 中最接近的是使用模式:

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

其中(当然)也匹配字符串,如"enh", "enls", ...。

于 2012-07-06T14:53:00.180 回答
3

在 Lua 中,括号仅用于捕获。他们不创造原子。

最接近您想要的模式的是:

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

如果您需要正则表达式引擎的全部功能,可以使用 Lua 常用引擎的绑定。还有 LPeg,一个用于创建PEGs的库,它带有一个正则表达式引擎作为示例(不确定它有多强大)。

于 2012-07-06T14:54:10.450 回答