我有一个必须使用正则表达式的项目,所以我决定使用 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'
我错过了什么?请帮帮我..
答案 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);
}