objective-c - 如何创建值包含字符序列的谓词,例如 Xcode 过滤

标签 objective-c regex cocoa predicate nsregularexpression

我想用谓词实现 Xcode 函数过滤。如果您在 Xcode 中通过“myFunc”过滤函数名称,它将查找该字符序列而不是确切的字符串。

示例:

妈妈YellowFunCar
m Y FunC

我是否必须使用 MATCHES 并提供正则表达式?

最佳答案

您可以使用 10.7+ 和 iOS 4.0+ 上内置的 NSRegularExpression 来执行此操作。类似于以下内容:

NSArray *stringsToSearch = [NSArray arrayWithObjects:@"mYFunC", @"momsYellowFunCar", @"Hello World!", nil];
NSString *searchString = @"mYFunC";
NSMutableString *regexPattern = [NSMutableString string];
for (NSUInteger i=0; i < [searchString length]; i++) {
    NSString *character = [searchString substringWithRange:NSMakeRange(i, 1)];
    [regexPattern appendFormat:@"%@.*", character];
}
NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regexPattern
                                                                       options:NSRegularExpressionDotMatchesLineSeparators
                                                                         error:&error];
if (!regex) {
    NSLog(@"Couldn't create regex: %@", error);
    return;
}

NSMutableArray *matchedStrings = [NSMutableArray array];
for (NSString *string in stringsToSearch) {
    if ([regex numberOfMatchesInString:string options:0 range:NSMakeRange(0, [string length])] > 0) {
        [matchedStrings addObject:string];
    }
}

NSLog(@"Matched strings: %@", matchedStrings); // mYFunC and momsYellowFunCar, but not Hello World!

如果必须使用 NSPredicate,则可以使用此代码的变体 -[NSPredicate predicateWithBlock:]

关于objective-c - 如何创建值包含字符序列的谓词,例如 Xcode 过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9037730/

相关文章:

iphone - 音频队列启动失败

ios - 将 NSArray 保存到 NSUserDefaults 不起作用

Python,正则表达式动态计数

ios - 用于正则表达式模式匹配崩溃的 NSPredicate

iphone - 在工具栏中添加自定义标签不起作用

ios - 仅映射一对多关系的元素

regex - 匹配后如何停止grep

objective-c - 如何检查文件是否在 Cocoa 中被锁定?

cocoa - 在 NSOperation 中自动释放对象安全吗?

objective-c - 获取沿 NSBezier 路径的任意点