0Pricing
Lua Academy · 课时

捕获组和 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. Lua 模式语法
  2. 捕获组和 string.match
  3. 使用 string.gmatch 进行分词
  4. 使用 string.gsub 进行转换
← 返回 Lua Academy