ios - NSPredicate with core data, search word with boundaries in string 属性

标签 ios regex core-data nspredicate

我觉得我的问题的答案可能已经在这个论坛的某个地方了,但经过几个小时的搜索,我似乎不太正确。我以前从未使用过 SQL,所以请多多包涵。

我有一个只有一个实体的核心数据模型,该实体有一个名为“定义”的属性(数据库中的每个实体都是一个字典条目)。我想要做的是搜索具有单词边界 的输入字符串的定义。如果我使用 NSPredicate 和输入文本进行简单的 CONTAINS[cd] 搜索,我就会得到我正在寻找的内容,除了我还得到包含字符输入序列的定义,而不管边界。

所以我还尝试构建一个正则表达式字符串,例如 @"(?w).*\\btheWord\\b.*",以及 MATCHES[cd] 搜索命令,但我在其他帖子上读到只能在搜索 NSString 时使用,不管它是否有效。

这应该很简单,但我很难过。任何帮助表示赞赏。

编辑:这是我正在做的一个例子

YTAppDelegate * delegate = [[UIApplication sharedApplication] delegate];

NSManagedObjectContext * context = delegate.managedObjectContext;

NSFetchRequest * request = [NSFetchRequest fetchRequestWithEntityName:@"YTDictData"];


NSString * searchTerm = [NSString stringWithFormat:@"'(?w).*\\b%@\\b.*'",[NSRegularExpression escapedPatternForString:inputText]];

NSString * searchString = [NSString stringWithFormat:@"definitions contains[cd] %@",searchTerm];

request.predicate = [NSPredicate predicateWithFormat:searchString];

NSError * searchError = nil;

NSArray * searchResults = [context executeFetchRequest:request error:&searchError];

在这种情况下,如果我要搜索单词“hello”,我将找不到任何匹配项。

但是,如果我不为正则表达式搜索格式化 searchString 字符串(即 searchString = inputString),我将得到包含字符序列“hello”的任何定义.我需要能够找到包含字符串“hello”的字符串,但我还需要添加约束,希望将“hello”识别为带边界的单词。

最佳答案

如评论中所述,您必须使用“MATCHES”运算符 用于正则表达式匹配。此外,您不应使用 stringWithFormat 构建谓词字符串(您的 searchString 变量)。

它应该是这样工作的:

NSString *searchTerm = [NSString stringWithFormat:@".*\\b%@\\b.*",
            [NSRegularExpression escapedPatternForString:inputText]];
request.predicate = [NSPredicate predicateWithFormat:@"definitions MATCHES[cd] %@",
                                    searchTerm];

关于ios - NSPredicate with core data, search word with boundaries in string 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28104948/

相关文章:

用于查找不同连续字符位置的 Java 正则表达式

ios - 核心数据模型设计 - 更改 "Live"对象也会更改保存的对象

php - 带上标 PHP 的 Excel 导入

iphone - 用于停止页面运动的 iOS Safari 标志?

ios - Xcode 8.0 更新后架构 arm64 的重复符号

ios - 复杂的正则表达式文本修改

ios - 自定义 UITableViewCell 内的 UIPickerView 未初始化,awakeFromNib() 未被调用

php preg_replace 使用捕获的组作为数组索引

ios - 仅从日期时间/日期选择器中快速按日期过滤

xcode - 带有多个参数的 NSPredicate