我有一个字符串,例如“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/