Swift中的正则表达式与示例:初学者指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Swift中的正则表达式:初学者完整指南

正则表达式(regex)是一种用于搜索、替换和验证文本数据的强大工具。在Swift中,正则表达式的操作通过Foundation框架中的NSRegularExpression类实现。本文将教您如何在iOS和macOS应用中创建和使用正则表达式,分析实际示例,并掌握基本语法。



1. 正则表达式基础语法

在编写Swift代码之前,了解regex的基本符号和结构非常重要。以下是关键元素:

  • . — 任意字符(除换行符外)
  • * — 前一个字符重复0次或多次
  • + — 重复1次或多次
  • ? — 重复0次或1次(使前一个字符可选)
  • \\d — 任意数字(0-9)
  • \\w — 任意字母、数字或下划线
  • [abc] — a、b或c中的任意一个字符
  • [^abc] — 除a、b、c外的任意字符
  • ^ — 字符串开头
  • $ — 字符串结尾

这些符号组合起来形成模式。例如,模式^[A-Za-z]+$表示:字符串从头到尾仅由拉丁字母组成。



2. 在Swift中创建和使用NSRegularExpression

在Swift中使用regex首先需要导入Foundation并创建NSRegularExpression实例。来看一个简单示例:查找字符串中的所有数字。

import Foundation

let text = "我的号码:123-456-7890"let pattern = "\\\\d+" // 模式:一个或多个数字

do { let regex = try NSRegularExpression(pattern: pattern) let results = regex.matches(in: text, range: NSRange(text.startIndex..., in: text)) for match in results { if let range = Range(match.range, in: text) { print("找到:\\(text[range])") } }} catch { print("正则表达式错误:\\(error.localizedDescription)")}// 输出:// 找到:123// 找到:456// 找到:7890

注意反斜杠的转义:Swift字符串中的"\\\\d"对应正则表达式\\d。当模式无效时,NSRegularExpression类会抛出异常,因此需要使用try-catch。



2.1. 处理NSRange

matches(in:range:)方法返回一个NSTextCheckingResult对象数组。每个结果包含找到的匹配项的范围(NSRange)。要转换为Swift Range,请使用初始化器Range(match.range, in: text)。



3. 正则表达式实际示例

我们来看三个典型任务:邮箱验证、提取URL和文本替换。



3.1. 邮箱地址验证

检查字符串是否符合简单的邮箱模式(简化版本):

func isValidEmail(_ email: String) -> Bool {    let pattern = "^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\\\.[A-Za-z]{2,}$"    let regex = try? NSRegularExpression(pattern: pattern)    let range = NSRange(location: 0, length: email.utf16.count)    return regex?.firstMatch(in: email, range: range) != nil}

print(isValidEmail("test@example.com")) // trueprint(isValidEmail("invalid-email")) // false

这里我们使用firstMatch,它返回第一个匹配项。如果没有匹配项,则返回nil。



3.2. 从文本中提取URL

假设我们有一个包含多个链接的字符串。提取所有URL:

let text = "访问网站 https://pythonlib.ru 或发送邮件至 support@pythonlib.ru"let pattern = "https?://[\\\\w./%-]+"

do

博客

书籍推荐