根据the docs,所有Lua重复运算符仅对单个字符起作用,因此您可以匹配

string.match('123', '1?(%d+)') -- returns 23

但不能匹配多字符字符串:
string.match('123', '(12)?(%d+)') -- want this to return 3

文档说这可以通过“多种模式和自定义逻辑”实现,但我不知道这意味着什么。有人可以提供一种模式来匹配上述内容吗?基本上,12应该选择全部或全部匹配,并返回数字字符串的其余部分。

最佳答案

我认为“多种模式和自定义逻辑”在这里表示这样的用法:

string.match('123', '12(%d+)') or string.match('123', '(%d+)')

由于or是短路的,因此如果第一个模式匹配,它将是expreexp的值,否则,第二个模式将尝试匹配。这正是正则表达式(12)?(%d+)的意思。

还要注意,对于Lua,还有更强大的LPeg或其他正则表达式库。

关于regex - Lua:将多个字符与?进行模式匹配重复运算符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17880946/

10-16 14:03