HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – NSRegularExpression无法找到捕获组匹配项大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用一个正则表达式模式解析字符串.

这是模式:

(\")(.+)(\")\s*(\{)

这是要解析的文本:

"base" {

我想找到这4个捕获组:

1. "
2. base
3. "
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场比赛.你必须进入那场比赛,在那里你会找到被捕获的组.请注意,我省略了第一个组,因为第一个组代表整个匹配.

这将输出

请注意转义的正则表达式字符串,并确保您使用相同的字符串.

大佬总结

以上是大佬教程为你收集整理的ios – NSRegularExpression无法找到捕获组匹配项全部内容,希望文章能够帮你解决ios – NSRegularExpression无法找到捕获组匹配项所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。