2013-09-20 3 views
1

Я пытаюсь изменить NSString при повторении NSTextCheckingResults с NSRegularExpression.NSMutableString изменять при повторном тестировании текста

Я знаю, что это не сработает так, как я его реализовал, так как каждая замена меняет длину строки так, чтобы действительность NSRages в моем цикле.

Как заменить несколько совпадений в цикле for? Вот мой код:

NSMutableString *string = [@"[H]…[mm]…[s]" mutableCopy]; 
NSReguralExpression *exp = [NSRegularExpression regularExpressionWithPattern:@"(\\[[Hms]{1,2}\\])" options:0 error:nil]; 

for (NSTextCheckingResult *result in [exp matchesInString:string options:NSMatchingReportCompletion range:NSMakeRange(0, [string length])]) { 
    [string replaceCharactersInRange:[result rangeAtIndex:0] withString:@"#"]; 
} 

Я немного застрял прямо сейчас. Ни один из подходов, о которых я думал, казался функциональным.

ответ

1

Я нашел ответ ... Я был немного глуп (не спал некоторое время ^^). При повторении строки в обратном порядке не имеет значения, что длина изменяется:

for (NSTextCheckingResult *result in [[exp matchesInString:string optinos:NSMatchingReportCompletion range:NSMakeRange(0, [string length])] reverseObjectEnumerator]) { 
    // … 
}