bry*_*yan 4 regex core-data ios
所以我正在尝试搜索核心数据.假设我CoreData有两个字段NSString(我们称之为foo和bar).用户指示要搜索的字段和搜索字符串.现在我正在使用这段代码:
NSString *format = [NSString stringWithFormat:@"(%@ matches[c] %@)", field, @"%@"];
// Double-escape that slash
NSString *pattern = [NSString stringWithFormat:@".*\\b%@.*", partialString];
NSPredicate *predicate = [NSPredicate predicateWithFormat:format, pattern];
[fetchRequest setPredicate:predicate];
Run Code Online (Sandbox Code Playgroud)
字段作为"foo"或"bar"传入.部分字符串是搜索字符串.如果bar包含"Grand Poobah",我希望它匹配"Poo"是查询字符串(但不是当它是"oobah"时,这就是为什么我在正则表达式中有\ b).
但我遇到的问题是,如果有人提出"Poo"(它崩溃,因为它被解释为其中的一部分)的查询regex.
在构建模式之前,是在partialString中简单地转义所有特殊字符的最佳途径吗?或者是否有其他方法我应该构建谓词?
是的,您应该转义搜索字符串中的所有特殊字符,并且有一个简单的方法:
NSString *escapedString = [NSRegularExpression escapedPatternForString:partialString];
NSString *pattern = [NSString stringWithFormat:@".*\\b%@.*", escapedString];
Run Code Online (Sandbox Code Playgroud)
但是你不应该使用stringWithFormat构建谓词格式字符串(如第一行).继续
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K MATCHES[c] %@", field, pattern];
Run Code Online (Sandbox Code Playgroud)
请注意,%K谓词格式必须用于密钥路径替换.
| 归档时间: |
|
| 查看次数: |
1259 次 |
| 最近记录: |