У меня есть NSString
, который я проверяю, есть ли NSLog
, а затем я прокомментирую это. Я использую NSRegularExpression
, а затем перебираю результат. Код:Цель C - NSRegularExpression с определенной подстрокой
-(NSString*)commentNSLogFromLine:(NSString*)lineStr {
NSString *regexStr [email protected]"NSLog\\(.*\\)[\\s]*\\;";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regexStr options:NSRegularExpressionCaseInsensitive error:nil];
NSArray *arrayOfAllMatches = [regex matchesInString:lineStr options:0 range:NSMakeRange(0, [lineStr length])];
NSMutableString *mutStr = [[NSMutableString alloc]initWithString:lineStr];
for (NSTextCheckingResult *textCheck in arrayOfAllMatches) {
if (textCheck) {
NSRange matchRange = [textCheck range];
NSString *strToReplace = [lineStr substringWithRange:matchRange];
NSString *commentedStr = [NSString stringWithFormat:@"/*%@*/",[lineStr substringWithRange:matchRange]];
[mutStr replaceOccurrencesOfString:strToReplace withString:commentedStr options:NSCaseInsensitiveSearch range:matchRange];
NSRange rOriginal = [mutStr rangeOfString:@"NSLog("];
if (NSNotFound != rOriginal.location) {
[mutStr replaceOccurrencesOfString:@"NSLog(" withString:@"DSLog(" options:NSCaseInsensitiveSearch range:rOriginal];
}
}
}
return [NSString stringWithString:mutStr];
}
Проблема с тестового примера:
NSString *str = @"NSLog(@"A string"); NSLog(@"A string2")"
Вместо возвращения "/*DSLog(@"A string");*/ /*DSLog(@"A string2")*/"
возвращается: "/*DSLog(@"A string"); NSLog(@"A string2")*/"
.
Проблема заключается в том, как Objective-C
обрабатывает регулярное выражение. Я ожидал бы 2 результата в arrayOfAllMatches
, но вместо этого я получаю только один. Есть ли способ попросить Objective-C
остановиться при первом вхождении );
?