我正在尝试将字符串与模式匹配,但有一件事我还没弄清楚。在正则表达式中我会这样做:
Strings:
en
eng
engl
engli
englis
english
Pattern:
^en(g(l(i(s(h?)?)?)?)?)?$
我希望所有字符串都匹配。 在Lua模式匹配中,我无法使其工作。
即使这样一个更简单的例子也行不通:
Strings:
fly
flying
Pattern:
^fly(ing)?$
有人知道怎么做吗?
答案 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的库,它带有一个正则表达式引擎作为示例(不确定它有多强大)。