无法匹配中间的零个或多个模式

Can't match a zero or more pattern in the middle

在正则表达式中,您可以在字符串

中使用正则表达式\d*

"foo 123 bar"

匹配“123”

但是,在 lua 中,当您在同一字符串上使用等效模式 %d* 时,您会得到 nothing。只有当你使用 %s%d* 时,你才会得到正确的匹配。

为什么?

要匹配 Lua regex 中的零个或多个数字,您可以使用表达式 %d+.

  • %d匹配任意数字字符。
  • + 匹配 1 次或多次重复。
local str = "foo 123 bar"
print(str:match("%d+")) -- Outputs '123'.

首先,我想说这种行为对我来说似乎有点奇怪。但是可以理解为什么Lua中的模式匹配是这样的。至于 %d*,Lua 尝试从字符串的开头匹配,并匹配了一个零长度的字符串。

local str = "foo 123 bar"
local result = str:match('%d*')
print(type(result), #result)

如你所见,它输出string 0。不是nil,所以匹配成功。这就是 Lua 解释您的模式的方式。当涉及到 %s%d* 时,Lua 无法匹配零长度字符串,因此继续 123

总而言之,Lua 不会寻找更长的匹配,即使它找到了长度为零的成功匹配。