如果搜索字符串包含左“(”和右“)”括号,NSPredicate 不起作用
Posted
技术标签:
【中文标题】如果搜索字符串包含左“(”和右“)”括号,NSPredicate 不起作用【英文标题】:NSPredicate not working if search string contains left "(" and right ")" brackets 【发布时间】:2015-12-09 06:42:08 【问题描述】:我正在使用 NSPredicate 从 coredata 中搜索包含。 但有些记录包含左右括号。 示例
productName = "产品 (Product1)" 我尝试按 prodcuctName 过滤数据,然后得到 0 个结果。
self.productName = @"Product (Product1)";
[NSPredicate predicateWithFormat:[NSString stringWithFormat:@"productName MATCHES[cd] \"%@\"",self.productName]];
请建议我解决这个问题。
提前致谢!
【问题讨论】:
为什么要在格式字符串中为%@
加上引号?
没有引号也不起作用。
没想到会这样。但是,如果它与带有这些引号的 any 搜索字符串一起使用,我会感到惊讶。
无论如何,你必须将搜索字符串中的括号转义。
现在解决了我的问题。 MATCHES 替换为 LIKE 关键字。因为现在不需要搜索结果 MATCHES。
【参考方案1】:
我用 LIKE 替换了 MATCHES 关键字。
现在 NSPredicate 工作正常。 MATCHES 是根据 ICU v3 使用正则表达式比较左/右表达式(有关更多详细信息,请参阅Regular Expressions 的 ICU 用户指南)。
而 LIKE 只是与“==”进行比较。
【讨论】:
以上是关于如果搜索字符串包含左“(”和右“)”括号,NSPredicate 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
2021-07-03:给定一个只由左括号和右括号的字符串,返回最长的有效括号子串的长度。