IOS5中的RegexKitLite

时间:2011-10-18 10:31:32

标签: objective-c regex xcode ios5 nsstring

我需要在我的应用程序中使用RegexKitlite作为字符串验证的一部分。 还添加了libicucore.A.dylib。 目前正在使用xcode 4.2,Base sdk iOS 5.0,Apple LLVM编译器3.0,architechture armv7。 将regexkit文件夹添加到我的应用程序会导致太多错误,例如  自动引用计数错误,  将Objective-C指针类型'NSString *'转换为C指针类型'CFStringRef'等

请帮助;我哪里出错了。

4 个答案:

答案 0 :(得分:34)

您也可以通过添加标志来禁用RegexKitLite的ARC:

选择项目 - >你的目标 - >在Tab上“Build Phases”并打开“Compile Sources”并为“RegexKitLite.m”添加标志“-fno-objc-arc”。

更新: 如果你得到:

未定义的符号: “_uregex_reset”,引自: RegexKitLite.o中的_rkl_splitArray RegexKitLite.o中的_rkl_replaceAll “_uregex_appendTail”,引自:.......

然后你需要添加标签“Build Settings” - > “链接” - > “其他链接标志”是“-licucore”

答案 1 :(得分:0)

你没有做错任何事。 Regexkit尚未更新到iOS 5。 iOS 5的重大变化是不再有保留,发布或自动释放。每个内存都像Java一样自动化。 (除了它发生在编译时而不是运行时。所以它在概念上就像Java。主要是。)

无论如何,您可以使用NSRegularExpression而不是等待Regexkit更新。使用Apple的东西也是面向未来的,因为他们将自己的东西更新版本到版本。

祝你好运!

答案 2 :(得分:0)

CBGraham是对的。或者,您可以禁用自动引用计数(项目>构建设置>搜索'自动引用计数')。

您显然必须进行手动引用计数,但RegexKitLite现在应该构建...

答案 3 :(得分:0)

我用两种方法替换了RegexKitLite。

字符串结果:

+(NSString*) regExString: (NSString *) pattern withString: (NSString *) searchedString {
    NSError  *error = nil;
    NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:&error];
    NSTextCheckingResult *match = [regex firstMatchInString:searchedString options:0 range:  NSMakeRange(0, [searchedString length])];
    if ([searchedString substringWithRange:[match rangeAtIndex:1]]) {
        return [searchedString substringWithRange:[match rangeAtIndex:1]];
    } else {
        return @"";
    }
}

结果数组:

+(NSArray *) regExArray:(NSString *) pattern withString: (NSString *) searchedString {
    NSMutableArray *results = [[NSMutableArray alloc] init];
    NSError *error;
    NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:&error];
    NSArray* matches = [regex matchesInString:searchedString options:0 range: NSMakeRange(0, searchedString.length)];

    for (NSTextCheckingResult* match in matches) {
        NSMutableArray *result = [NSMutableArray array];
        NSRange matchRange = [match range];
        NSString *numString = [searchedString substringWithRange:matchRange];
        [result addObject:numString];

        for (int i=1;i < (int)match.numberOfRanges;i++) {
            NSRange range = [match rangeAtIndex:i];
            @try {
                NSString *numString = [searchedString substringWithRange:range];
                [result addObject:numString];
            }
            @catch (NSException *exception) {
                [result addObject:[NSNull null]];
            }
        }
       [results addObject:result];
   }
   return results;
}