正则表达式字面量与匹配
使用 Regex 类型匹配模式。
正则表达式字面量与匹配 是 CoddyKit 上的免费 Swift Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Swift Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Swift Academy 课程共包含 4 节课。
Swift 中的正则表达式
Swift 5.7+ 在标准库和 Foundation 中提供了原生正则表达式。您可以将正则表达式写成斜杠之间的字面量,例如 /\d+/,编译器会在构建时检查它。
正则表达式字面量
正则表达式字面量会生成一个 Regex 值。它的类型会捕获匹配结果。最简单的模式会匹配固定的字符序列。
let pattern = /hello/
if "hello world".contains(pattern) {
print("Found hello")
}wholeMatch(of:)
只有当整个字符串都匹配该模式时,wholeMatch(of:) 才会成功。它会返回一个可选的匹配结果;如果整个字符串不匹配,则返回 nil。
let digits = /\d+/
if let m = "12345".wholeMatch(of: digits) {
print("Whole match: \(m.output)")
} else {
print("No whole match")
}firstMatch(of:)
firstMatch(of:) 会扫描字符串,并返回模式在字符串中的任意位置首次匹配到的部分。
let word = /\w+/
if let m = " swift rocks".firstMatch(of: word) {
print("First word: \(m.output)")
}访问匹配范围
匹配结果会公开原字符串中的一个 range,因此您可以准确知道匹配发生的位置。
let text = "abc123def"
if let m = text.firstMatch(of: /\d+/) {
print("Matched: \(m.output)")
print("At: \(text[m.range])")
}字符类
在模式中,\d 匹配数字,\w 匹配单词字符,\s 匹配空白字符。方括号可以定义自定义集合,例如 [aeiou]。
let vowel = /[aeiou]/
if let m = "sky".firstMatch(of: vowel) {
print("Vowel: \(m.output)")
} else {
print("No vowels found")
}量词
量词控制重复次数:* 表示零次或多次,+ 表示一次或多次,? 表示可选,{n,m} 表示有界次数。
let phone = /\d{3}-\d{4}/
print("555-1234".wholeMatch(of: phone) != nil)
print("12-34".wholeMatch(of: phone) != nil)锚点
使用 ^ 将匹配锚定在行首,使用 $ 将匹配锚定在行尾。锚点不会消耗字符;它们只断言一个位置。
let startsWithCap = /^[A-Z]\w*/
if let m = "Swift".firstMatch(of: startsWithCap) {
print("Matched: \(m.output)")
}不区分大小写的匹配
您可以将 .ignoresCase() 附加到正则表达式值上来忽略大小写,这在输入的大小写不确定时很有用。
let pattern = /swift/.ignoresCase()
print("I love SWIFT".contains(pattern))使用 matches(of:) 进行匹配
matches(of:) 会返回字符串中每个不重叠匹配项组成的集合,让您可以遍历所有匹配项。
let nums = "a1 b22 c333"
for m in nums.matches(of: /\d+/) {
print(m.output)
}验证输入
一个常见用途是验证:针对完整的预期格式构建模式,然后使用 wholeMatch 进行检查;不匹配时它会返回 nil。
func isZip(_ s: String) -> Bool {
s.wholeMatch(of: /\d{5}/) != nil
}
print(isZip("90210"))
print(isZip("ABCDE"))快速检查
只有在整个字符串都匹配时才会成功的是哪个方法?
回顾
您学习了如何使用斜杠编写正则表达式字面量,并使用 wholeMatch(of:)、firstMatch(of:) 和 matches(of:) 进行匹配。您还了解了字符类、量词、锚点和不区分大小写的匹配。接下来,您将使用捕获组从匹配结果中提取数据。
用 AI 导师学习 Swift — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 122
- 课程
- 409
常见问题解答
「正则表达式字面量与匹配」课时是免费的吗?
是的 — 「正则表达式字面量与匹配」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Swift Academy 课程的其余内容,请升级到 CoddyKit PRO。 Swift Academy 课程共包含 4 节课。
「正则表达式字面量与匹配」这节课中我会学到什么?
使用 Regex 类型匹配模式。 你通过在浏览器中直接运行的动手代码来练习 Swift Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Swift Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Swift Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「正则表达式字面量与匹配」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Swift Academy 课中编写并运行代码吗?
能。每节 Swift Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 正则表达式字面量与匹配
- 捕获组
- RegexBuilder DSL
- 替换与拆分文本