Попробуйте [NSRegularExpression enumerateMatchesInString: параметры: диапазон: использование блока:].Или, действительно, любой из других методов сопоставления NSRegularExpression.Они не будут возвращать NSIndexSet - это будет массив объектов NSTextChecking - но вы можете легко получить индекс из этого.
Вот некоторый (непроверенный!) Пример кода:
NSString* aString = @"Here's a string, that contains some letters a";
NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:@"a" options:0 error:NULL];
NSArray* matches = [regex matchesInString:aString options:0 range:NSMakeRange(0,[aString length])];
for(NSTextCheckingResult* i in matches) {
NSRange range = i.range;
NSUInteger index = range.location; //the index you were looking for!
//do something here
}
На самом деле более эффективно использовать enumerateMatchesInString, но я не знаю, насколько вы знакомы с блоками, поэтому я выбрал более распространенное быстрое перечисление NSArray.
Update: тот же код с использованием блоков.
NSString* aString = @"Here's a string, that contains some letters a";
NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:@"a";
[regex enumerateMatchesInString:aString
options:0
range:NSMakeRange(0,[aString length])
usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
NSRange range = result.range;
NSUInteger index = range.location; //the index you were looking for
//do work here
}];