Swift 提取 Regex 匹配
正则表达式(Regex)是一种用来匹配字符串模式的工具,它是编程中常用的工具之一。在Swift中,我们可以使用NSRegularExpression
类来处理正则表达式的匹配。
NSRegularExpression
NSRegularExpression
是一个基于PCRE(Perl兼容正则表达式)引擎的Cocoa框架中的一个类,它可以用来处理正则表达式的匹配。
以下是一个示例代码,它演示了如何使用NSRegularExpression
来进行正则表达式的匹配:
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)")
}
在上述代码中,首先定义了一个字符串,然后定义了一个正则表达式Swift
。接下来,我们利用NSRegularExpression
类以及上述正则表达式来进行匹配。
代码块中第一步是实例化正则表达式,它的输入是我们定义的正则表达式。在这个例子中,我们使用了try
关键词,这是因为NSRegularExpression的初始化代码可能会抛出异常。输入参数中,我们使用了正则表达式的字符串形式。后面两个参数分别是要搜索的字符串及其范围。
接下来,我们使用matches(in:range:)
方法来获取匹配结果,这个方法返回的是一个NSTextCheckingResult
类型的数组。我们在for
循环中遍历这个数组,从而逐个打印出每一个匹配项的位置以及具体匹配的字符串。
提取匹配结果
在上述示例代码中,我们利用NSRegularExpression
类对字符串模式进行了匹配,但是仅仅得到了匹配结果的位置信息,并未提取出具体的匹配结果。接下来我们演示如何提取出匹配结果。
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)")
}
在上面代码的正则表达式"(Sw)(\\S*)"
中,括号将表达式的内容分成了两个组:第一个组是"Sw"
,第二个组是"ift Regex"
。
我们使用了matches(in:range:)
方法来获取匹配结果,并使用NSTextCheckingResult
对象的range(at:)
方法来提取出组的位置信息。我们还定义了两个字符串group1String
和group2String
分别来表示分组1和分组2的具体匹配字符串,最后在循环中打印了所有的匹配结果。
结论
在Swift中,我们可以使用NSRegularExpression
类来进行正则表达式的匹配及结果提取。使用正则表达式需要熟练掌握匹配规则语法,以及掌握如何使用API进行匹配结果的处理。通过应用上述示例代码,开发者可以方便将匹配结果提取出来进行后续处理。