根据the docs,所有Lua重复运算符仅适用于单个字符,因此您可以匹配
string.match('123', '1?(%d+)') -- returns 23
但无法匹配多字符字符串:
string.match('123', '(12)?(%d+)') -- want this to return 3
文档说通过“多种模式和自定义逻辑”可以实现,但我不知道这意味着什么。有人能提供一种模式匹配的方法吗?基本上,12
应该可以选择全部或全部匹配,并返回数字字符串的其余部分。
答案 0 :(得分:5)
我认为"多种模式和自定义逻辑"这意味着这样使用:
string.match('123', '12(%d+)') or string.match('123', '(%d+)')
由于or
是短路的,如果第一个模式匹配,则它将是expresion的值,否则第二个模式将尝试匹配。这正是正则表达式(12)?(%d+)
的意思。
另请注意,Lua有更强大的LPeg或其他正则表达式库。