gpt4 book ai didi

ios - 使用正则表达式和特殊字符搜索 CoreData

转载 作者:可可西里 更新时间:2023-11-01 05:12:42 25 4
gpt4 key购买 nike

所以我正在尝试搜索核心数据。假设我的 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];

字段作为“foo”或“bar”传入。部分字符串是搜索字符串。如果 bar 包含“Grand Poobah”,我希望它在“Poo”是查询字符串时匹配(但不是在它是“oobah”时匹配,这就是我在正则表达式中使用\b 的原因)。

但我遇到的问题是,如果有人查询“Poo(”,它会崩溃,因为它被解释为 regex 的一部分。

在构建模式之前简单地转义 partialString 中的所有特殊字符的最佳途径是什么?还是我应该以其他方式构建谓词?

最佳答案

是的,您应该转义搜索字符串中的所有特殊字符,并且有一个这样做的简单方法:

NSString *escapedString = [NSRegularExpression escapedPatternForString:partialString];
NSString *pattern = [NSString stringWithFormat:@".*\\b%@.*", escapedString];

但是您不应该使用 stringWithFormat 来构建谓词格式字符串(如在您的第一行)。简单继续

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K MATCHES[c] %@", field, pattern];

请注意,%K 谓词格式必须用于键路径 替换。

关于ios - 使用正则表达式和特殊字符搜索 CoreData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21892444/

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