在迭代文本检查结果时修改NSMutableString

时间:2013-09-20 14:59:51

标签: loops replace nsstring nsregularexpression nsrange

我正在尝试从NSString迭代NSTextCheckingResults时修改NSRegularExpression

我知道它不会按照我实现它的方式工作,因为每个替换都会改变字符串的长度,因此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 个答案:

答案 0 :(得分:1)

我找到了答案......我只是有点愚蠢(没有睡一会儿^^)。 当以相反的顺序迭代字符串时,长度改变并不重要:

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