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

发布于 2024-12-29 12:23:42 字数 210 浏览 0 评论 0原文

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

示例:

momsYellowFunCar
m Y FunC

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

I want to implement Xcode function filtering with predicate. If you filter the function names in Xcode, by "myFunc" it will look for that sequence of characters not the exact string.

Example:

momsYellowFunCar
m Y FunC

Would I have to use MATCHES and provide a regex some how?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

旧伤还要旧人安 2025-01-05 12:23:42

您可以使用 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:]

You can do this using NSRegularExpression which is built-in on 10.7+ and iOS 4.0+. Something like the following:

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!

If you have to use an NSPredicate, you can use a variation of this code with -[NSPredicate predicateWithBlock:].

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文