我想在属性description
(NSString
实例)中搜索是否有给定的单词。
我试过这个谓词:
[NSPredicate predicateWithFormat:@"description CONTAINS[cd] %@", theWord];
它有效,但它也找到子词。
例如,给定theWord
:
汽车
这也将是description
:
圣诞颂歌
相反,我希望我的谓词只匹配a
,christmas
或carol
。
(我正在使用Core Data和NSFetchRequest。)
答案 0 :(得分:14)
这样的东西?
NSString *matchStr = @".*\\bCarol\\b.*";
NSPredicate *pred =[NSPredicate predicateWithFormat: @"description MATCHES %@", matchStr];
NSArray *arr = @[
@"A Christmas Carol",
@"Sing",
@"Song"
];
NSArray *filtered = [arr filteredArrayUsingPredicate: pred];
技巧是\b
元字符,表示字符串中的字边界。为了得到一个反斜杠"进入"正则表达式模式字符串,你必须在它前面加上另一个反斜杠,这样编译器才能理解字符串中应该有一个真正的反斜杠。因此" \\ b"在字符串中。
另外,为了更好地覆盖非英语语言字符串,您应该通过设置w
标志选项来启用Unicode字边界检测。匹配字符串将如下所示:
NSString *matchStr = @"(?w).*\\bCarol\\b.*";