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

在正则表达式中,您可以在字符串中使用正则表达式\d *来匹配"foo 123 bar"中的"123"。然而,在Lua中,如果您在同一字符串上使用等效的模式%d *,则什么也不会得到。只有当使用%s%d *才会得到正确的匹配。

为什么?

原文链接 https://stackoverflow.com/questions/69716014

点赞
stackoverflow用户8982034
stackoverflow用户8982034

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

  • %d 匹配任何数字字符。
  • + 匹配一个或多个重复字符。
local str = "foo 123 bar"
print(str:match("%d+")) -- 输出 '123'。
2021-10-26 00:19:38
stackoverflow用户17237579
stackoverflow用户17237579

首先,我想说这种行为对我来说有点奇怪。但是可以理解 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 也不会寻找更长的匹配。

2021-10-26 02:06:39