NSPredicate 用于过滤对象的强项是 BEGINS WITH special characters

Posted

技术标签:

【中文标题】NSPredicate 用于过滤对象的强项是 BEGINS WITH special characters【英文标题】:NSPredicate for filter objects whoes string is BEGINSWITH special characters 【发布时间】:2016-12-27 07:39:19 【问题描述】:

我有一种情况,我想过滤具有NSDictionary 对象的NSArray 对象,并且每个对象都有键name。我想用name 键值应以特殊字符或数字字符(如0-9,~!@#$%^&*()_ 等)开头的对象数量进行过滤。

我试图在谷歌上找到这个但没有得到正确的解决方案。我使用了以下谓词,但无法获得正确的对象。

NSPredicate *predicate=   [NSPredicate predicateWithFormat:@"self.name BEGINSWITH %@",@"[^0-9]+.*"];

【问题讨论】:

【参考方案1】:

BEGINSWITH 运算符不支持正则表达式。您可以使用谓词中的以下内容检查它是否以非字母字符开头:

 NSString *myRegex = @"[A-Za-z]*";
 NSPredicate *myTestPred = [NSPredicate predicateWithFormat:@"NOT (SELF MATCHES %@)", myRegex]

【讨论】:

不工作..它在运行时崩溃并出现异常。 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse the format string "NOT (SELF MATCHES[c] '^[A-Za-z].*'"' 我在解决谓词中的语法错误后尝试过,但仍然无法正常工作 是的,它现在可以工作,但我认为regex 应该是这个@"^[A-Za-z]*".. 但它可以工作.. 再次感谢。

以上是关于NSPredicate 用于过滤对象的强项是 BEGINS WITH special characters的主要内容,如果未能解决你的问题,请参考以下文章

带有核心数据对象的 NSPredicate

NSPredicate 用于过滤数组

NSPredicate 不适用于 ios 中的过滤

使用 NSPredicate 过滤核心数据中的对象

使用 NSPredicate 过滤对象和键(需要拆分)

如何通过 NSPredicate 过滤 Core Data 托管对象?