我正在尝试将字符串与模式匹配,但有一件事我还没有弄清楚。在正则表达式中,我会这样做:
Strings:
en
eng
engl
engli
englis
english
Pattern:
^en(g(l(i(s(h?)?)?)?)?)?$
我希望所有字符串都匹配。在 Lua 模式匹配中,我无法让它工作。
即使是这样一个更简单的例子也行不通:
Strings:
fly
flying
Pattern:
^fly(ing)?$
有人知道怎么做这个吗?
我正在尝试将字符串与模式匹配,但有一件事我还没有弄清楚。在正则表达式中,我会这样做:
Strings:
en
eng
engl
engli
englis
english
Pattern:
^en(g(l(i(s(h?)?)?)?)?)?$
我希望所有字符串都匹配。在 Lua 模式匹配中,我无法让它工作。
即使是这样一个更简单的例子也行不通:
Strings:
fly
flying
Pattern:
^fly(ing)?$
有人知道怎么做这个吗?
您不能使用 Lua 的量词?
、*
和使匹配组成为可选(+
或重复它们) -
。
在 pattern(%d+)?
中,问号“失去”了它的特殊含义,并且将简单地匹配文字?
,正如您通过执行以下代码行所看到的:
text = "a?"
first_match = text:match("((%w+)?)")
print(first_match)
这将打印:
a?
AFAIK,你可以在 Lua 中最接近的是使用模式:
^eng?l?i?s?h?$
其中(当然)也匹配字符串,如"enh"
, "enls"
, ...。
在 Lua 中,括号仅用于捕获。他们不创造原子。
最接近您想要的模式的是:
'^flyi?n?g?$'
'^en?g?l?i?s?h?$'
如果您需要正则表达式引擎的全部功能,可以使用 Lua 常用引擎的绑定。还有 LPeg,一个用于创建PEGs的库,它带有一个正则表达式引擎作为示例(不确定它有多强大)。