5

根据文档,所有 Lua 重复运算符仅适用于单个字符,因此您可以匹配

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

但不能匹配多字符串:

string.match('123', '(12)?(%d+)') -- want this to return 3

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

4

1 回答 1

5

我认为这里的“多种模式和自定义逻辑”意味着这样的用法:

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

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

另请注意,有更强大的LPeg或其他用于 Lua 的正则表达式库。

于 2013-07-26T12:43:09.717 回答