Lua模式括号和0或1次出现

时间:2012-07-06 14:42:29

标签: regex lua lua-patterns

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

Strings:
en
eng
engl
engli
englis
english

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

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

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

Strings:
fly
flying

Pattern:
^fly(ing)?$

有人知道怎么做吗?

2 个答案:

答案 0 :(得分:8)

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

在模式(%d+)?中,问号“失去”其特殊含义,并且只会通过执行以下代码行来匹配文字?

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

将打印:

a?

AFAIK,你最接近Lua的将是使用这种模式:

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

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

答案 1 :(得分:2)

在Lua中,括号仅用于捕获。它们不会产生原子。

您最接近所需的模式是:

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

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