NSPredicate 正则表达式错误

Posted

技术标签:

【中文标题】NSPredicate 正则表达式错误【英文标题】:NSPredicate Regex error 【发布时间】:2016-08-26 07:12:10 【问题描述】:

我正在处理一个文档管理页面。我使用了NSPredicate 正则表达式,同时从用户输入中获得了searchBar.text。输入是中文形式的括号但英文形式很好时发生错误(如下图)。如果有人遇到过这个问题?谢谢。

这是我的代码,崩溃发生在最后一行。

NSString * searchStr = [NSString stringWithFormat:@"fileName like[cd] \'*%@*\'",searchDisplayController.searchBar.text];
NSPredicate *predicate = [NSPredicate predicateWithFormat:searchStr];
self.fileArrayAfterPre =  [[NSMutableArray alloc] initWithArray:[fileArr filteredArrayUsingPredicate:predicate]];

【问题讨论】:

出现此错误的原因是您用作正则表达式模式的输入包含未配对数量的未转义()。要么转义用作正则表达式模式的字符串,要么只使用 CONTAINS,如下面的答案所示。 我已经知道了,谢谢提醒。 【参考方案1】:

LIKE:用于通配符表达式。

CONTAIN:根据您的问题,您应该使用 contains[cd],因为它将文件与搜索文本匹配。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"fileName CONTAINS[cd] %@",searchDisplayController.searchBar.text];

    self.fileArrayAfterPre =  [[NSMutableArray alloc] initWithArray:[fileArr filteredArrayUsingPredicate:predicate]];

【讨论】:

以上是关于NSPredicate 正则表达式错误的主要内容,如果未能解决你的问题,请参考以下文章

NSPredicate 和正则表达式

NSPredicate 与正则表达式检查字母数字

NSpredicate 上的正则表达式未按预期工作

NSPredicate 正则表达式不起作用

如何使用正则表达式搜索忽略 NSPredicate 的某些字符?

NSPredicate 和简单的正则表达式问题