0Pricing
Ruby Academy · 课时

正则表达式字面量

模式基础

正则表达式字面量 是 CoddyKit 上的免费 Ruby Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Ruby Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Ruby Academy 课程共包含 4 节课。

什么是正则表达式

正则表达式是一种用于匹配文本的模式。在 Ruby 中,正则表达式是 Regexp 类的一级对象。

您可以使用正则表达式来搜索、验证和提取字符串中的部分内容。

  • 匹配单词、数字或符号
  • 验证电子邮件地址和电话号码
  • 从杂乱的文本中提取片段
pattern = /hello/
puts pattern.class
puts(pattern.match?('hello world'))

使用斜杠书写正则表达式字面量

在 Ruby 中,书写正则表达式最常见的方式是将其放在两个正斜杠之间:/pattern/。

这称为正则表达式字面量。斜杠之间的所有内容就是模式。

ruby = /ruby/
puts ruby.class
puts(ruby.match?('I love ruby'))
puts(ruby.match?('I love python'))

=~ 匹配运算符

=~ 运算符会使用正则表达式测试字符串。它返回第一个匹配项的索引;如果没有匹配项,则返回 nil。

puts('hello world' =~ /world/)
puts(('hello world' =~ /xyz/).inspect)

使用 match? 获取布尔值结果

如果您只需要是或否的答案,请使用 match?。它会返回 true 或 false,并且速度更快,因为它不会创建 MatchData 对象。

puts(/\d/.match?('abc123'))
puts(/\d/.match?('abcdef'))

字符类

方括号中的字符类会匹配集合中的任意一个字符。

  • [abc] 匹配 a、b 或 c
  • [a-z] 匹配任意小写字母
  • [0-9] 匹配任意数字
puts(/[aeiou]/.match?('sky'))
puts(/[aeiou]/.match?('tree'))
puts(/[0-9]/.match?('room 7'))

简写字符类

Ruby 为常见字符类提供了转义简写:

  • \d 表示数字,\D 表示非数字
  • \w 表示单词字符(字母、数字和下划线)
  • \s 表示空白字符,\S 表示非空白字符
puts(/\d\d/.match?('age 42'))
puts(/\w+/.match?('hello_99'))
puts(/\s/.match?('no_space'))

点号与量词

点号 . 会匹配任意单个字符(换行符除外)。量词用于控制重复次数:

  • * 零次或多次
  • + 一次或多次
  • ? 零次或一次
  • {2,4} 介于 2 次和 4 次之间
puts(/ab+c/.match?('abbbc'))
puts(/colou?r/.match?('color'))
puts(/\d{3}/.match?('id 451'))

使用竖线进行分支选择

竖线 | 表示 OR。模式 cat|dog 会匹配其中任意一个单词。

请使用圆括号,将分支选择组合到更大的模式中。

pet = /cat|dog/
puts(pet.match?('I have a dog'))
puts(pet.match?('I have a fish'))
puts(/^(yes|no)$/.match?('yes'))

不区分大小写标志

在结束斜杠后添加 i 标志,即可让匹配不区分大小写。

其他有用的标志包括 m(点号匹配换行符)和 x(扩展模式,忽略空白字符)。

puts(/ruby/i.match?('I love RUBY'))
puts(/ruby/.match?('I love RUBY'))

从字符串构建正则表达式

您可以使用 Regexp.new 在运行时构建正则表达式。使用 Regexp.escape 可以安全地包含可能带有特殊字符的用户输入。

word = 'price'
pattern = Regexp.new(word)
puts(pattern.match?('the price is high'))
puts(Regexp.escape('a.b*c'))

锚点预览

锚点匹配的是位置,而不是字符:

  • ^ 行首
  • $ 行尾
  • \A 字符串开头
  • \z 字符串末尾

稍后您将深入学习这些内容。

puts(/^Hello/.match?('Hello there'))
puts(/world$/.match?('hello world'))

快速检查

当正则表达式匹配字符串时,=~ 运算符会返回什么?

回顾:正则表达式字面量

您学习了 Ruby 正则表达式的基础知识:

  • 正则表达式字面量写在 /slashes/ 之间
  • =~ 返回索引,match? 返回 true/false
  • 字符类 [ ] 和简写 \d \w \s
  • 量词 * + ? {n,m} 和分支选择 |
  • i 标志会让匹配不区分大小写

接下来您将学习如何捕获匹配的片段。

puts(/\w+@\w+\.\w+/i.match?('USER@Mail.com'))

常见问题解答

「正则表达式字面量」课时是免费的吗?

是的 — 「正则表达式字面量」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Ruby Academy 课程的其余内容,请升级到 CoddyKit PRO。 Ruby Academy 课程共包含 4 节课。

「正则表达式字面量」这节课中我会学到什么?

模式基础 你通过在浏览器中直接运行的动手代码来练习 Ruby Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Ruby Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Ruby Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「正则表达式字面量」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Ruby Academy 课中编写并运行代码吗?

能。每节 Ruby Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 正则表达式字面量
  2. 匹配与捕获
  3. 替换
  4. 命名组与锚点
← 返回 Ruby Academy