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

时间:2012-07-27 18:36:57

标签: lua lua-patterns

基本字符串是: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:字符串被省略但在第二个模式中没有?

2 个答案:

答案 0 :(得分:5)

括号内的任何内容都是capture group;由括号中的模式部分匹配的输入字符串的任何部分由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()的第三个参数中最常见,但可以在任何模式匹配函数中使用。

答案 1 :(得分:-1)

在这种情况下,它应该只用于分组事物,这在任何方面都无关紧要。