Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 正则表达式捕获组swift_Ios_Regex_Swift_Swift2 - Fatal编程技术网

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异常。