Swift 提取 Regex 匹配
正則表達(dá)式(Regex)是一種用來(lái)匹配字符串模式的工具,它是編程中常用的工具之一。愛(ài)掏網(wǎng) - it200.com在Swift中,我們可以使用NSRegularExpression
類來(lái)處理正則表達(dá)式的匹配。愛(ài)掏網(wǎng) - it200.com
NSRegularExpression
是一個(gè)基于PCRE(Perl兼容正則表達(dá)式)引擎的Cocoa框架中的一個(gè)類,它可以用來(lái)處理正則表達(dá)式的匹配。愛(ài)掏網(wǎng) - it200.com
以下是一個(gè)示例代碼,它演示了如何使用NSRegularExpression
來(lái)進(jìn)行正則表達(dá)式的匹配:
let string = "Hello Swift Regex"
let pattern = "Swift"
do {
let regex = try NSRegularExpression(pattern: pattern)
let results = regex.matches(in: string, range: NSRange(string.startIndex..., in: string))
for match in results {
print("Matched range: \(match.range)")
let matchedString = String(string[Range(match.range, in: string)!])
print("Matched string: \(matchedString)")
}
} catch let error {
print("Invalid regular expression: \(error.localizedDescription)")
}
在上述代碼中,首先定義了一個(gè)字符串,然后定義了一個(gè)正則表達(dá)式Swift
。愛(ài)掏網(wǎng) - it200.com接下來(lái),我們利用NSRegularExpression
類以及上述正則表達(dá)式來(lái)進(jìn)行匹配。愛(ài)掏網(wǎng) - it200.com
代碼塊中第一步是實(shí)例化正則表達(dá)式,它的輸入是我們定義的正則表達(dá)式。愛(ài)掏網(wǎng) - it200.com在這個(gè)例子中,我們使用了try
關(guān)鍵詞,這是因?yàn)镹SRegularExpression的初始化代碼可能會(huì)拋出異常。愛(ài)掏網(wǎng) - it200.com輸入?yún)?shù)中,我們使用了正則表達(dá)式的字符串形式。愛(ài)掏網(wǎng) - it200.com后面兩個(gè)參數(shù)分別是要搜索的字符串及其范圍。愛(ài)掏網(wǎng) - it200.com
接下來(lái),我們使用matches(in:range:)
方法來(lái)獲取匹配結(jié)果,這個(gè)方法返回的是一個(gè)NSTextCheckingResult
類型的數(shù)組。愛(ài)掏網(wǎng) - it200.com我們?cè)?code>for循環(huán)中遍歷這個(gè)數(shù)組,從而逐個(gè)打印出每一個(gè)匹配項(xiàng)的位置以及具體匹配的字符串。愛(ài)掏網(wǎng) - it200.com
提取匹配結(jié)果
在上述示例代碼中,我們利用NSRegularExpression
類對(duì)字符串模式進(jìn)行了匹配,但是僅僅得到了匹配結(jié)果的位置信息,并未提取出具體的匹配結(jié)果。愛(ài)掏網(wǎng) - it200.com接下來(lái)我們演示如何提取出匹配結(jié)果。愛(ài)掏網(wǎng) - it200.com
let string = "Hello Swift Regex"
let pattern = "(Sw)(\\S*)"
do {
let regex = try NSRegularExpression(pattern: pattern)
let results = regex.matches(in: string, range: NSRange(string.startIndex..., in: string))
for match in results {
let matchedString = String(string[Range(match.range, in: string)!])
let group1Range = Range(match.range(at: 1), in: string)!
let group2Range = Range(match.range(at: 2), in: string)!
let group1String = String(string[group1Range])
let group2String = String(string[group2Range])
print("Matched string: \(matchedString)")
print("Group 1 string: \(group1String)")
print("Group 2 string: \(group2String)")
}
} catch let error {
print("Invalid regular expression: \(error.localizedDescription)")
}
在上面代碼的正則表達(dá)式"(Sw)(\\S*)"
中,括號(hào)將表達(dá)式的內(nèi)容分成了兩個(gè)組:第一個(gè)組是"Sw"
,第二個(gè)組是"ift Regex"
。愛(ài)掏網(wǎng) - it200.com
我們使用了matches(in:range:)
方法來(lái)獲取匹配結(jié)果,并使用NSTextCheckingResult
對(duì)象的range(at:)
方法來(lái)提取出組的位置信息。愛(ài)掏網(wǎng) - it200.com我們還定義了兩個(gè)字符串group1String
和group2String
分別來(lái)表示分組1和分組2的具體匹配字符串,最后在循環(huán)中打印了所有的匹配結(jié)果。愛(ài)掏網(wǎng) - it200.com
結(jié)論
在Swift中,我們可以使用NSRegularExpression
類來(lái)進(jìn)行正則表達(dá)式的匹配及結(jié)果提取。愛(ài)掏網(wǎng) - it200.com使用正則表達(dá)式需要熟練掌握匹配規(guī)則語(yǔ)法,以及掌握如何使用API進(jìn)行匹配結(jié)果的處理。愛(ài)掏網(wǎng) - it200.com通過(guò)應(yīng)用上述示例代碼,開發(fā)者可以方便將匹配結(jié)果提取出來(lái)進(jìn)行后續(xù)處理。愛(ài)掏網(wǎng) - it200.com