这个Lua模式中括号的用途是什么?

基本字符串为:IP: 192.168.0.1

将该字符串传递给 string.gmatch 函数(除了以下模式),将返回以下结果:

模式:IP: (%d+.%d+.%d+.%d+) -->192.168.0.1

模式:IP: %d+.%d+.%d+.%d+ -->IP: 192.168.0.1

我的问题是,在 Lua 模式匹配引擎中,这些括号的含义是什么? 为什么在第一个模式中使用括号时,IP: 字符串被省略,但在第二个模式中不是?

点赞
用户1452161
用户1452161

在这种情况下,它仅用于对事物进行分组,这在这里并没有太大关系。

2012-07-27 18:48:15
用户1516484
用户1516484

任何在括号内的内容都是捕获组;与模式部分匹配的输入字符串的任何部分都被捕获并由match()gmatch()返回。如果模式中没有捕获组,则返回整个字符串。

local x, y, z = ("123456"):match("(%d)%d(%d)%d(%d)%d")
print(x, y, z)
-- 1, 3, 5

在指定相关捕获组之后,可以使用%1%2等来访问捕获的值:

local x, y = ("123123123"):match("(%d%d%d)%1(%1)")
print(x, y)
-- 123, 123

这最常见于string.gsub()的第三个参数中,但可以在任何模式匹配函数中使用。

2012-07-27 19:07:04