epo*_*gee 8 regex core-data foundation nspredicate
这必须是重复的.但由于存在如此多的NSPredicate问题,我找不到合适的问题.
我有一个包含compositeName字段的Core Data对象列表.像'Emily Blunt'这样的名字可能就在那里.我想使用一个搜索列表NSPredicate,让我搜索"Em",但也搜索"Bl",然后在获取的结果中显示此名称.
这一定非常简单,但正如你猜测的那样,我没有看到它.我对使用正则表达式的NSPredicate的不正常尝试看起来像这样:
[NSPredicate predicateWithFormat:@"compositeName MATCHES[cd] '.*(?<=^|\\s)%@.*'", query];
Run Code Online (Sandbox Code Playgroud)
我对这个正则表达式的想法是:
但它不起作用.我没有得到任何结果.我该如何解决?
PS如果有一个没有正则表达式的NSPredicate解决方案也适合我的目的.
Mon*_*olo 16
您需要在谓词字符串之外构建整个正则表达式模式字符串,然后将其传递给谓词.
此外,还有一个正则表达式构造\b来匹配单词边界,这就是你所追求的.
总而言之,这段代码应该为您提供一个简单的问题解决方案:
NSString *searchString = @"Em";
NSString *regexString = [NSString stringWithFormat:@".*\\b%@.*", searchString];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"self.compositeName matches[cd] %@", regexString];
Run Code Online (Sandbox Code Playgroud)
如果尚未清除输入搜索文本,则可能需要在将其传递给正则表达式引擎之前执行此操作.
另一个改进可能是在单词边界接受unicode字符,以允许人们搜索'Ántonio','Über'和其他类似的字符串.
以下代码行将创建一个正则表达式模式,它将处理以下两个方面:
NSString *orgSearchString = @"^";
NSString *escapedSearchString = [NSRegularExpression escapedPatternForString: orgSearchString];
NSString *regexString = [NSString stringWithFormat:@"(?w:).*\\b%@.*", escapedSearchString];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1950 次 |
| 最近记录: |