gpt4 book ai didi

ios - NSPredicate 未按需要过滤

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:14:28 27 4
gpt4 key购买 nike

考虑以下数组:

NSArray *dataValues = @[@"Foo[0]", @"Foo[1].bar"];

以及以下正则表达式模式、谓词和预期输出:

NSString *pattern = @"Foo[0]";
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"SELF BEGINSWITH[cd] %@", pattern];
NSArray *results = [dataValues filteredArrayUsingPredicate: predicate];
NSLog(@"matches = %ld", (long)results.count);

这会按预期在控制台中打印 1。如果我们将模式更改为:

NSString *pattern = @"Foo\\[[0-9]\\]";

我希望这会在控制台中打印 2,但它会打印 0。我对外部方括号进行了两次转义,以允许对它们进行解析,并希望找到括号内包含数字 0 到 9 的字符串以匹配此表达式。

我已经针对以下网站检查了正则表达式,它确实可以正常工作:

http://regexr.com/3bcut

我在针对 iOS 8.4 iPhone 6 Plus 模拟器运行的 Xcode(6.4、6E35b)中没有警告/错误,但为什么我的正则表达式没有按预期过滤?

最佳答案

您可以根据自己的需要尝试这样做:

    NSArray *dataValues = @[@"Foo[0]", @"Foo[1].bar"];
NSString *pattern = @"Foo[*]*";
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"SELF LIKE %@", pattern];
NSArray *results = [dataValues filteredArrayUsingPredicate: predicate];
NSLog(@"matches = %ld", (long)results.count);

你可以更基础一些并使用

    NSMutableArray *results = [NSMutableArray array];
for (NSString *str in dataValues) {
if ([str rangeOfCharacterFromSet:[NSCharacterSet decimalDigitCharacterSet]].location != NSNotFound) {
if ([str hasPrefix:@"Foo["]) {
[results addObject:str];
}
}
}
NSLog(@"matches = %ld", (long)results.count);

关于ios - NSPredicate 未按需要过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31416164/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com