Dev*_*Dev 4 cocoa-touch core-data nsstring nspredicate nsfetchrequest
我想搜索属性description(NSString实例)中是否有给定的单词.
我试过这个谓词:
[NSPredicate predicateWithFormat:@"description CONTAINS[cd] %@", theWord];
Run Code Online (Sandbox Code Playgroud)
它有效,但它也找到了子词.
例如,给定theWord:
汽车
它也将是这个description:
圣诞颂歌
相反,我希望我的谓词只匹配a,或者christmas,或者carol.
(我正在使用Core Data和NSFetchRequest.)
Mon*_*olo 14
像这样的东西?
NSString *matchStr = @".*\\bCarol\\b.*";
NSPredicate *pred =[NSPredicate predicateWithFormat: @"description MATCHES %@", matchStr];
NSArray *arr = @[
@"A Christmas Carol",
@"Sing",
@"Song"
];
NSArray *filtered = [arr filteredArrayUsingPredicate: pred];
Run Code Online (Sandbox Code Playgroud)
技巧是\b元字符,表示字符串中的字边界.为了使反斜杠"进入"正则表达式模式字符串,你必须在它之前加上另一个反斜杠,这样编译器才能理解字符串中应该有一个真正的反斜杠.因此字符串中的"\\ b".
另外,为了更好地覆盖非英语语言字符串,您应该通过设置w标志选项来启用Unicode字边界检测.匹配字符串将如下所示:
NSString *matchStr = @"(?w).*\\bCarol\\b.*";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1766 次 |
| 最近记录: |