Swift 提取正则表达式匹配

swiftserver side programmingprogramming更新于 2025/9/23 9:22:17

在 Swift 中,您可以使用 Foundation 框架提供的 NSRegularExpression 类提取正则表达式匹配。Swift 的 NSRegularExpression 是一个强大的正则表达式处理工具,可用于各种文本处理任务。

NSRegularExpression 类

您可以使用 Swift Foundation 框架中的 NSRegularExpression 类来使用正则表达式。借助正则表达式,您可以搜索和替换文本,以及创建定义字符串集合的模式。

您可以使用 NSRegularExpression 将字符串模式转换为正则表达式对象,然后使用该对象查找并处理与该模式匹配的字符串。

以下是 NSRegularExpression 的一些主要功能

  • 创建正则表达式对象 − 可以使用 init(pattern:options:) 初始化函数,通过将字符串模式作为参数来创建 NSRegularExpression 对象。正则表达式由称为模式的字符串描述。

  • 查找匹配项 − 获得 NSRegularExpression 对象后,您可以使用 matches(in:options:range:) 函数在字符串中查找匹配项。此函数返回一个 NSTextCheckingResult 对象数组,其中详细说明了每次匹配的范围。

  • 获取匹配的子字符串 − 要获取与正则表达式匹配的精确子字符串,您可以使用 Range 和 String 类。可以使用 Range 类根据指定范围的字符创建自定义字符串。该类定义字符串中的字符范围。

  • 替换匹配的子字符串 − 您可以使用

    stringByReplacingMatches(in:options:range:withTemplate:) 方法将指定的子字符串替换为替换字符串。替换字符串可以包含引用匹配子字符串的特殊替换模式。

示例 1:从字符串中查找所有具有特定长度的单词

  • 步骤 1 − 创建包含要搜索文本的字符串作为输入,模式是一个正则表达式,用于匹配任何恰好包含五个字母的单词。

  • 步骤 2 − 使用 try?运算符使用给定模式创建 NSRegularExpression 对象,如果失败则返回 nil。

  • 步骤 3 − 调用 NSRegularExpression 类的 matches(in:range:) 方法,然后用于查找输入字符串中的所有匹配项。

  • 步骤 4 − 执行循环,使用 Range 和 String 类提取匹配的子字符串。

  • 步骤 5 − matchStrings 数组将包含所有与正则表达式模式匹配的子字符串。

import Foundation
let inputString = "The quick brown fox jumps over the lazy dog."
let pattern = "\b\w{5}\b"
if let regex = try? NSRegularExpression(pattern: pattern) {
   let matches = regex.matches(in: inputString, range: NSRange(inputString.startIndex..., in: inputString))
   let matchStrings = matches.map { match in
      String(inputString[Range(match.range, in: inputString)!])
   }
   print("输入字符串: \(inputString)")
   print("匹配字符串: \(matchStrings)")
}

输出

输入字符串: The quick brown fox jumps over the lazy dog.
匹配字符串: ["quick", "brown", "jumps"]

示例 2:从字符串中查找电子邮件地址

  • 步骤 1 − 创建包含要搜索文本的字符串作为输入。该模式是一个匹配所有电子邮件地址的正则表达式。

  • 步骤 2 − 使用 try?运算符使用给定模式创建 NSRegularExpression 对象,如果失败则返回 nil。

  • 步骤 3 − 调用 NSRegularExpression 类的 matches(in:range:) 方法,然后用于查找输入字符串中的所有匹配项。

  • 步骤 4 − 执行循环,使用 Range 和 String 类提取匹配的子字符串。

  • 步骤 5 − matchStrings 数组将包含所有与正则表达式模式匹配的子字符串。

import Foundation
let inputString = "Contact us at info@example.com or support@example.org"
let pattern = "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}"
if let regex = try? NSRegularExpression(pattern: pattern) {
   let matches = regex.matches(in: inputString, range: NSRange(inputString.startIndex..., in: inputString))
   let matchStrings = matches.map { match in
      String(inputString[Range(match.range, in: inputString)!])
   }    
   print("输入字符串: \(inputString)")
   print("匹配字符串: \(matchStrings)")
}

输出

输入字符串: Contact us at info@example.com or support@example.org
匹配字符串: ["info@example.com", "support@example.org"]

此示例演示如何使用正则表达式从字符串中提取所有电子邮件地址。使用的模式为 [A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,},它匹配任何具有电子邮件地址格式的字符串。此模式匹配 @ 符号前的任何字母数字字符、点、下划线、加号和连字符,后跟可以包含点和连字符的域名,并以至少包含两个字母的顶级域名结尾。

示例 3:从字符串中提取所有电话号码

  • 步骤 1 − 创建包含要搜索文本的字符串作为输入。该模式是一个匹配所有电话号码的正则表达式。

  • 步骤 2 − 使用 try?运算符使用给定模式创建 NSRegularExpression 对象,如果失败则返回 nil。

  • 步骤 3 − 调用 NSRegularExpression 类的 matches(in:range:) 方法,然后用于查找输入字符串中的所有匹配项。

  • 步骤 4 − 执行循环,使用 Range 和 String 类提取匹配的子字符串。

  • 步骤 5 − matchStrings 数组将包含所有与正则表达式模式匹配的子字符串。

import Foundation
let inputString = "Call us at (123) 456-7890 or (555) 123-4567"
let pattern = "\(\d{3}\) \d{3}-\d{4}"
if let regex = try? NSRegularExpression(pattern: pattern) {
   let matches = regex.matches(in: inputString, range: NSRange(inputString.startIndex..., in: inputString))
   let matchStrings = matches.map { match in
      String(inputString[Range(match.range, in: inputString)!])
   }
    
    print("输入字符串:\(inputString)")
    print("匹配字符串:\(matchStrings)")
}

输出

输入字符串:Call us at (123) 456-7890 or (555) 123-4567
匹配字符串:["(123) 456-7890", "(555) 123-4567"]

此示例演示如何使用正则表达式从字符串中提取所有电话号码。使用的模式为 \(\d{3}\) \d{3}-\d{4},它匹配任何具有电话号码格式的字符串。此模式匹配任何以左括号开头,后跟三个数字,然后是右括号、一个空格、三个数字、一个连字符,最后是四个数字的字符串。

结论

在 Swift 中,正则表达式是处理文本的有效工具。您可以使用 Foundation 框架提供的 NSRegularExpression 类来构建和编辑正则表达式。正则表达式可用于执行查找和替换文本、提取匹配的子字符串以及验证输入等任务。通过学习正则表达式,您可以显著提高在 Swift 中处理文本的熟练程度,并提升您的程序员水平。



相关文章



关于我们 | 隐私条款 | 学习路线
返回顶部