Swift 正則表示式匹配提取
在Swift中,您可以使用Foundation框架提供的NSRegularExpression類提取正則表示式匹配項。Swift的NSRegularExpression是處理Swift中正則表示式的強大工具,可用於各種文字處理任務。
NSRegularExpression 類
您可以使用名為NSRegularExpression的Swift Foundation框架類來使用正則表示式。藉助正則表示式,您可以搜尋和替換文字,以及建立定義字串集合的模式。
您可以使用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("Input string: \(inputString)")
print("Match strings: \(matchStrings)")
}
輸出
Input string: The quick brown fox jumps over the lazy dog. Match strings: ["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("Input string: \(inputString)")
print("Match strings: \(matchStrings)")
}
輸出
Input string: Contact us at info@example.com or support@example.org Match strings: ["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("Input string: \(inputString)")
print("Match strings: \(matchStrings)")
}
輸出
Input string: Call us at (123) 456-7890 or (555) 123-4567 Match strings: ["(123) 456-7890", "(555) 123-4567"]
此示例演示如何使用正則表示式從字串中提取所有電話號碼。使用的模式是\(\d{3}\) \d{3}-\d{4}, 它匹配任何具有電話號碼格式的字串。此模式匹配任何以左括號開頭、後跟三個數字、然後是右括號、空格、三個數字、連字元,最後是四個數字的字串。
結論
在Swift中,正則表示式是處理文字的有效工具。您可以使用Foundation框架提供的NSRegularExpression類建立和編輯正則表示式。正則表示式可用於查詢和替換文字、提取匹配子字串和驗證輸入等任務。透過學習正則表示式,您可以大大提高使用Swift處理文字的熟練程度,並在程式設計方面取得進步。
資料結構
網路
關係型資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP