首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >取代RegExKitLite的NSRegularExpression

取代RegExKitLite的NSRegularExpression
EN

Stack Overflow用户
提问于 2012-01-19 20:16:31
回答 1查看 1.1K关注 0票数 0

现在我的应用程序targets >iOS4我正在尽可能地移除对非Apple框架的依赖。

我现在有这个代码

代码语言:javascript
复制
    NSString *destination =@"HHH-DDDD>dddd,ffff";
    NSString *searchString = destination;
    NSString *regexString  = @"[^a-zA-Z\?]";
    NSArray  *splitArray   = NULL;
    splitArray = [searchString componentsSeparatedByRegex:regexString];

这将生成一个在所有字符之间包含字符串元素的数组。即"HHH","DDDD","dddd","ffff“。

在NSRegularExpression中似乎根本没有对应的东西,或者是我读错了文档?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-08 07:28:25

看起来你是对的,但你可以使用一个类别:

代码语言:javascript
复制
#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那样出色。以下是一个无意义文件的输出:

代码语言:javascript
复制
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

以及测试代码:

代码语言:javascript
复制
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);

我不确定区别是否真的很重要,因为文件的大小约为36MB,但以防万一有人真的需要它,他必须使用RegexKitLite。我想如果有人可以发布一些真正的性能测试和/或默认的NSRegularExpression方法。我想知道哪个更快=)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8925866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档