кажется, что вы правы, но вы можете использовать категорию:
#import "NSString+RegEx_Array.h"
@implementation NSString (RegEx_Array)
- (NSArray*)componentsSeparatedByRegex2:(NSString *)pattern
{
NSUInteger pos = 0;
NSRange area = NSMakeRange(0, [self length]);
NSRegularExpression *regEx = [NSRegularExpression
regularExpressionWithPattern:pattern
options:0 error:nil];
NSArray *matchResults = [regEx matchesInString:self options:0 range:area];
NSMutableArray *returnArray = [NSMutableArray arrayWithCapacity:matchResults.count];
for (NSTextCheckingResult *result in matchResults) {
NSRange substrRange = NSMakeRange(pos, [result range].location-pos);
[returnArray addObject:[self substringWithRange:substrRange]];
pos = [result range].location + [result range].length;
}
if (pos < area.length) {
[returnArray addObject:[self substringFromIndex:pos]];
}
return returnArray;
}
@end
но я должен признать, что это не так эффективно, как RegexKitLite. Вот вывод для бессмысленного файла:
2012-02-08 00:16:32.251 shittyagain[96057:c03] String-Length: 36355200
2012-02-08 00:16:36.420 shittyagain[96057:c03] Time taken RegexKitLite: 4.167
2012-02-08 00:16:42.989 shittyagain[96057:c03] Time taken NSRegularExp: 6.568
и код тестирования:
NSString *regx = @"[^a-zA-Z\?]";
NSString *file = [[NSBundle mainBundle]pathForResource:@"reallylong" ofType:nil];
NSString *searchString = [NSString stringWithContentsOfFile:file encoding:NSUTF8StringEncoding error:nil];
NSLog(@"String-Length: %ld", searchString.length);
NSDate *preDate = [NSDate date];
[searchString componentsSeparatedByRegex:regx];
NSLog(@"Time taken RegexKitLite: %1.3f", [preDate timeIntervalSinceNow]*-1);
NSDate *preDate2 = [NSDate date];
[searchString componentsSeparatedByRegex2:regx];
NSLog(@"Time taken NSRegularExp: %1.3f", [preDate2 timeIntervalSinceNow]*-1);
Я не уверен, что разница действительно имеет значение, потому что файл имеет размер ~ 36 МБ, но на случай, если кому-то это понадобится очень быстро, он должен использовать RegexKitLite. Я хотел бы, чтобы кто-то мог опубликовать какой-нибудь реальный тест производительности и / или для по умолчанию NSRegularExpression
методов. Я хочу знать, какой из них быстрее =)