匹配与捕获
match 与捕获内容
匹配与捕获 是 CoddyKit 上的免费 Ruby Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Ruby Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Ruby Academy 课程共包含 4 节课。
MatchData 对象
调用 regex.match(string) 时,如果成功,Ruby 会返回一个 MatchData 对象;如果失败,则返回 nil。
MatchData 保存匹配的文本以及捕获的组。
m = /world/.match('hello world')
puts m.class
puts(m[0])完整匹配:索引 0
MatchData 的索引 0 始终表示完整的匹配子字符串,与是否存在其他组无关。
m = /\d+/.match('order 4521 shipped')
puts(m[0])
puts(m.to_s)捕获组
圆括号 ( ) 会创建捕获组。每个组都可以通过从 1 开始的编号访问。
m = /(\d{4})-(\d{2})/.match('2026-05')
puts(m[1])
puts(m[2])captures 方法
captures 会返回所有捕获组组成的数组(不包括索引 0 处的完整匹配)。
m = /(\w+)@(\w+)/.match('alice@example')
p m.captures解构捕获结果
由于 captures 返回数组,因此您可以直接将结果解构到变量中。
user, host = /(\w+)@(\w+)/.match('bob@server').captures
puts user
puts host匹配前后的文本
MatchData 提供了用于获取匹配项周围文本的辅助功能:
pre_match匹配项之前的部分post_match匹配项之后的部分
m = /\d+/.match('abc123xyz')
puts(m.pre_match)
puts(m.post_match)使用 scan 查找所有匹配项
String#scan 会返回字符串中的每一个匹配项组成的数组,而不仅仅是第一个。
nums = '12 cats, 8 dogs, 3 birds'.scan(/\d+/)
p nums使用 scan 和捕获组
如果您的模式包含组,scan 会返回一个由数组组成的数组,每个匹配项对应一个数组,其中包含该匹配项的捕获结果。
pairs = 'a=1 b=2 c=3'.scan(/(\w)=(\d)/)
p pairs安全处理空值
请始终记住,如果没有任何匹配,match 会返回 nil。在使用结果前,请先对这种情况进行保护。
m = /(\d+)/.match('no digits here')
if m
puts m[1]
else
puts 'no match found'
end特殊变量
成功匹配后,Ruby 会设置全局变量:$~ 是 MatchData,而 $1、$2 是编号捕获结果。
它们在简短脚本中很方便,但在实际代码中,明确使用 MatchData 会更清晰。
if 'name: Alice' =~ /name: (\w+)/
puts $1
end提取日期
结合使用组和捕获结果,即可一步从字符串中提取结构化数据。
year, month, day = /(\d{4})-(\d{2})-(\d{2})/.match('2026-05-29').captures
puts "Year #{year}, Month #{month}, Day #{day}"快速检查
给定 'a=1 b=2'.scan(/(\w)=(\d)/),结果的结构是什么?
回顾:匹配与捕获
现在您可以从匹配结果中提取数据:
match返回 MatchData 或 nil- 索引 0 是完整匹配,1 及以上是捕获组
captures以数组形式返回所有组scan查找字符串中的所有匹配项- 始终对
nil进行保护
p 'x1 y2 z3'.scan(/([a-z])(\d)/)常见问题解答
「匹配与捕获」课时是免费的吗?
是的 — 「匹配与捕获」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Ruby Academy 课程的其余内容,请升级到 CoddyKit PRO。 Ruby Academy 课程共包含 4 节课。
「匹配与捕获」这节课中我会学到什么?
match 与捕获内容 你通过在浏览器中直接运行的动手代码来练习 Ruby Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Ruby Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Ruby Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「匹配与捕获」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Ruby Academy 课中编写并运行代码吗?
能。每节 Ruby Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。