捕获组和 string.match
使用 string.match 和 () 捕获从字符串中提取捕获组。
捕获组和 string.match 是 CoddyKit 上的免费 Lua Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Lua Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Lua Academy 课程共包含 4 节课。
什么是捕获?
捕获是 Lua 模式中用括号括起来的子模式,用于从匹配文本中提取子字符串。
带捕获的 string.match
当模式包含捕获时,string.match 返回捕获的子字符串,而不是完整匹配结果。
local date = "2025-01-15"
local y, m, d = date:match("(%d+)-(%d+)-(%d+)")
print(y, m, d) -- 2025 01 15单个捕获
单个捕获返回一个字符串值。
local s = "name: Alice"
local name = s:match("name: (%a+)")
print(name) -- Alice多个捕获
多个捕获会作为多个值返回。
local pair = "key = value"
local k, v = pair:match("(%w+)%s*=%s*(%w+)")
print(k, v) -- key value位置捕获 ()
空捕获 () 会将当前字符串位置作为数字捕获下来。
local s = "hello world"
local pos = s:match("()world")
print(pos) -- 7 (position where world starts)可选捕获
在捕获组后使用 ?,即可捕获可选部分。
local s = "http://example.com"
local protocol, host = s:match("(https?)://([^/]+)")
print(protocol, host) -- http example.com带捕获的 string.find
带捕获的 string.find 会依次返回起始位置、结束位置和捕获的子字符串。
local s = "phone: 555-1234"
local i, j, num = s:find("phone: (%d+-%d+)")
print(i, j, num) -- 1 16 555-1234嵌套捕获
捕获可以嵌套。它们按照左括号出现的顺序从左到右编号。
local s = "2025-01-15"
local full, year = s:match("((%d%d%d%d)-%d%d-%d%d)")
print(full, year) -- 2025-01-15 2025捕获的最佳实践
使用符合命名约定的变量以提高可读性。不要过度嵌套捕获。匹配失败时会返回 nil,使用捕获结果前请始终进行检查。
local result = s:match("(%d+)")
if result then print("found:", result)
else print("no match") end匹配电子邮件地址
一个简单的(不符合 RFC 标准的)电子邮件模式,包含捕获。
local email = "user@example.com"
local user, domain = email:match("([^@]+)@(.+)")
print(user, domain) -- user example.com所有匹配结果表
要将所有匹配结果收集到表中,请使用 string.gmatch(下一课将介绍)。
捕获问题
"2025-01-15":match("(%d+)-(%d+)-(%d+)") 会返回什么?
回顾:捕获与 string.match
模式使用 () 来提取子字符串。string.match 直接返回捕获的值。空捕获 () 会捕获位置。请始终检查匹配结果是否为 nil。
常见问题解答
「捕获组和 string.match」课时是免费的吗?
是的 — 「捕获组和 string.match」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Lua Academy 课程的其余内容,请升级到 CoddyKit PRO。 Lua Academy 课程共包含 4 节课。
「捕获组和 string.match」这节课中我会学到什么?
使用 string.match 和 () 捕获从字符串中提取捕获组。 你通过在浏览器中直接运行的动手代码来练习 Lua Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Lua Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Lua Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「捕获组和 string.match」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Lua Academy 课中编写并运行代码吗?
能。每节 Lua Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- Lua 模式语法
- 捕获组和 string.match
- 使用 string.gmatch 进行分词
- 使用 string.gsub 进行转换