基字符串是:IP: 192.168.0.1
这个Lua模式中括号的用法是什么?
传递该字符串string.gmatch功能(除了下面的图案)将返回以下结果:
图案:IP: (%d+.%d+.%d+.%d+)
- > 192.168.0.1
图案: IP: %d+.%d+.%d+.%d+
- > IP:192.168.0.1
我的问题是那些括号对Lua模式匹配引擎的含义是什么? 为什么通过使用第一种模式的括号,IP:
字符串被省略,但在第二种模式中没有?
基字符串是:IP: 192.168.0.1
这个Lua模式中括号的用法是什么?
传递该字符串string.gmatch功能(除了下面的图案)将返回以下结果:
图案:IP: (%d+.%d+.%d+.%d+)
- > 192.168.0.1
图案: IP: %d+.%d+.%d+.%d+
- > IP:192.168.0.1
我的问题是那些括号对Lua模式匹配引擎的含义是什么? 为什么通过使用第一种模式的括号,IP:
字符串被省略,但在第二种模式中没有?
括号内的任何内容都是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()
第三参数,但可以用在任何模式匹配功能中。
在这种情况下,它应该只是用于分组的东西,这在任何方面都不重要。