根据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/