RegexKitLite - iOS:无法识别的选择器

时间:2013-02-28 17:50:19

标签: ios objective-c cocoa-touch uikit regexkitlite

我有一个必须使用正则表达式的项目,所以我决定使用 RegexKitLite ,我下载它,将 RegexKitLite.m 添加到“编译源代码”中, RegexKitLite.h 进入“复制文件”部分。将 libicucore.A.dylib 添加到项目库中。将 RegexKitLite.h 导入到我的类中,并编写代码(仅用于测试):

        NSString *str = @"testing string";
        if ([str isMatchedByRegex:@"[^a-zA-Z0-9]"])
        {
            NSLog(@"Some message here");
        }

之后我收到错误消息:

-[__NSCFString isMatchedByRegex:]: unrecognized selector sent to instance 0x1ed45ac0
2013-02-28 19:46:20.732 TextProject[8467:907] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString isMatchedByRegex:]: unrecognized selector sent to instance 0x1ed45ac0'

我错过了什么?请帮帮我..

1 个答案:

答案 0 :(得分:1)

经过一番挖掘之后,实际上没有任何Cocoa API在iOS4之前使用正则表达式,因此程序员使用的是像RegexKitLite这样的外部库,它们确实可以用于iOS。

如果您使用的是iOS4或更高版本,则不应该有任何理由不使用NSRegularExpression。可以找到类参考说明here

例如,对于NSRegularExpression,您的代码段将如下所示:

NSString *str = @"testing string";   
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[^a-zA-Z0-9]" options:NSRegularExpressionCaseInsensitive error:nil];
NSTextCheckingResult *match = [regex firstMatchInString:str options:0 range:NSMakeRange(0, [str length])];
NSRange range = [match rangeAtIndex:0];
if (range.location != NSNotFound)
{
    NSString* matchingString = [str substringWithRange:range];
    NSLog(@"%@", matchingString);
}