Lua:使用“?”重复运算符进行模式匹配多个字符。

根据文档,所有 Lua 的重复操作符仅适用于单个字符,所以您可以匹配

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

但无法匹配多字符字符串:

string.match('123', '(12)?(%d+)') -- 希望此代码返回 3

该文档表示可以通过“多个模式和自定义逻辑”实现,但我不知道这是什么意思。有人能提供一种匹配上述模式的方法吗?基本上,12应完全或不匹配,返回剩余的数字字符串。

点赞
用户1009479
用户1009479

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

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

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

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

2013-07-26 12:43:09