这是模式:
(\")(.+)(\")\s*(\{)
这是要解析的文本:
"base" {
我想找到这4个捕获组:
1. "2. base3. "4. {
我正在使用以下代码尝试捕获这些组
class func matchesInCapturingGroups(text: String,pattern: String) -> [String] { var results = [String]() let textRange = NSMakeRange(0,count(text)) var index = 0 if let matches = regexp(pattern)?.matchesInString(text,options: NSMatchingOptions.ReportCompletion,range: textRange) as? [NSTextCheckingResult] { for match in matches { // this match = <NSExtendedRegularExpressionCheckingResult: 0x7fac3b601fd0>{0,8}{<NSRegularExpression: 0x7fac3b70b5b0> (")(.+)(")\s*(\{) 0x1} results.append(self.substring(text,range: match.range)) } } return results}
不幸的是,它只能找到一个范围(0,8)的组,它等于:“base”{.所以它找到一个组,它是整个字符串而不是4个组.
甚至可以使用NSRegularExpression来获取这些组吗?
解决方法 是的,当然有可能.您只需要更改当前逻辑以查找实际组:func matchesInCapturingGroups(text: String,text.lengthOfBytesUsingEnCoding(NSUTF8StringEnCoding)) do { let regex = try NSRegularExpression(pattern: pattern,options: []) let matches = regex.matchesInString(text,range: textRange) for index in 1..<matches[0].numberOfRanges { results.append((text as Nsstring).substringWithRange(matches[0].rangeAtIndex(index))) } return results } catch { return [] }}let pattern = "(\")(.+)(\")\s*(\{)"print(matchesInCapturingGroups("\"base\" {",pattern: pattern))
你实际上只得到1场比赛.你必须进入那场比赛,在那里你会找到被捕获的组.请注意,我省略了第一个组,因为第一个组代表整个匹配.
这将输出
[“””,“base”,“””,“{“]
请注意转义的正则表达式字符串,并确保您使用相同的字符串.
总结以上是内存溢出为你收集整理的ios – NSRegularExpression无法找到捕获组匹配项全部内容,希望文章能够帮你解决ios – NSRegularExpression无法找到捕获组匹配项所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)