我有一个字符串,例如“ab ad adk fda kla kad ab ab kd”。我想获取所有范围的ab。(这里ab位于3位置,所以我应该获得3范围)。在正常情况下,我的代码工作正常,但是如果搜索文本为“。”,那么我得到错误的结果

do {
    let regEx = try NSRegularExpression(pattern: searchText, options: NSRegularExpressionOptions.CaseInsensitive)

    let matchesRanges = regEx.matchesInString(attributedText.string, options:[], range: NSMakeRange(0, attributedText.string.length))

    for rng in matchesRanges {
        let wordRange = rng.rangeAtIndex(0)
    }
} catch {
    ...
}

最佳答案

以下解决方案使用 native Swift 4函数range(of:, options:, range:, locale:)):

extension String {
    func ranges(of substring: String, options: CompareOptions = [], locale: Locale? = nil) -> [Range<Index>] {
        var ranges: [Range<Index>] = []
        while ranges.last.map({ $0.upperBound < self.endIndex }) ?? true,
            let range = self.range(of: substring, options: options, range: (ranges.last?.upperBound ?? self.startIndex)..<self.endIndex, locale: locale)
        {
            ranges.append(range)
        }
        return ranges
    }
}

(然后,Swift 4提供了 native API从Range<Index>转换为NSRange)

关于ios - 快速获取字符串中子字符串的所有范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36865443/

10-12 06:03