Ios 正则表达式捕获组swift
我有一个字符串形式的正则表达式搜索方法:Ios 正则表达式捕获组swift,ios,regex,swift,swift2,Ios,Regex,Swift,Swift2,我有一个字符串形式的正则表达式搜索方法: extension String { func searchRegex (regex: String) -> Array<String> { do { let regex = try NSRegularExpression(pattern: regex, options: NSRegularExpressionOptions(rawValue: 0)) let ns
extension String {
func searchRegex (regex: String) -> Array<String> {
do {
let regex = try NSRegularExpression(pattern: regex, options: NSRegularExpressionOptions(rawValue: 0))
let nsstr = self as NSString
let all = NSRange(location: 0, length: nsstr.length)
var matches : Array<String> = Array<String>()
regex.enumerateMatchesInString(self, options: NSMatchingOptions(rawValue: 0), range: all) {
(result : NSTextCheckingResult?, _, _) in
let theResult = nsstr.substringWithRange(result!.range)
matches.append(theResult)
}
return matches
} catch {
return Array<String>()
}
}
}
扩展字符串{
func searchRegex(regex:String)->数组{
做{
让regex=尝试NSRegularExpression(模式:regex,选项:NSRegularExpressionOptions(原始值:0))
让nsstr=self作为NSString
let all=NSRange(位置:0,长度:nsstr.length)
变量匹配:Array=Array()
regex.EnumerateMatchesInstalling(self,选项:NSMatchingOptions(rawValue:0),范围:all){
(结果:NSTextCheckingResult?,u,u)在
让theResult=nsstr.substringWithRange(结果!.range)
匹配项。追加(结果)
}
复赛
}抓住{
返回数组()
}
}
}
它工作得很好。但是如果我有一个正则表达式product\u title:\['(.*)
它会返回我product\u title:[\'Some title bla\'
,但我只需要部分(.*)
我是swift新手,但在python中,通过使用
groups()
函数解决了这个问题。如何在swift中使用捕获组。请给我举个例子。NSTextCheckingResult
有一个numberOfRanges
属性和一个rangeAtIndex()
方法,该方法允许您获取单个捕获组的范围。因此,如果您想要第一个捕获组而不是整个匹配字符串,您可以将代码修改为:
var matches : Array<String> = Array<String>()
regex.enumerateMatchesInString(self, options: NSMatchingOptions(rawValue: 0), range: all) {(result : NSTextCheckingResult?, _, _) in
let capturedRange = result!.rangeAtIndex(1)
if !NSEqualRanges(capturedRange, NSMakeRange(NSNotFound, 0)) {
let theResult = nsstr.substringWithRange(result!.rangeAtIndex(1))
matches.append(theResult)
}
}
var匹配:Array=Array()
regex.EnumerateMatchesInstalling(self,options:NSMatchingOptions(rawValue:0),range:all){(结果:NSTextCheckingResult?,u,u)in
让capturedRange=result!.rangeAtIndex(1)
if!NSEqualRanges(capturedRange,NSMakeRange(NSNotFound,0)){
让theResult=nsstr.substringWithRange(结果!.rangeAtIndex(1))
匹配项。追加(结果)
}
}
我在使用多个捕获组时遇到了nsrange异常。