正则表达式字面量
模式基础
正则表达式字面量 是 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 反馈 — 无需本地设置。