“全字”通过NSPredicate在NSString中搜索

时间:2011-12-19 09:15:22

标签: cocoa-touch core-data nsstring nspredicate nsfetchrequest

我想在属性descriptionNSString实例)中搜索是否有给定的单词。

我试过这个谓词:

[NSPredicate predicateWithFormat:@"description CONTAINS[cd] %@", theWord];

它有效,但它也找到子词

例如,给定theWord

  

汽车

这也将是description

  

圣诞颂歌

相反,我希望我的谓词只匹配achristmascarol

(我正在使用Core Data和NSFetchRequest。)

1 个答案:

答案 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.*";