1

我正在尝试NSString修改NSTextCheckingResultsNSRegularExpression.

我知道它不会像我实现它的方式那样工作,因为每次替换都会改变字符串的长度,因此我的循环中 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:@"#"];
}

我现在有点卡住了。我想到的所有方法似乎都不起作用。

4

1 回答 1

1

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

for (NSTextCheckingResult *result in [[exp matchesInString:string optinos:NSMatchingReportCompletion range:NSMakeRange(0, [string length])] reverseObjectEnumerator]) {
    // …
}
于 2013-09-20T15:04:51.183 回答