我想搜索属性 description
(一个 NSString
实例)中是否有给定的单词。
我试过这个谓词:
[NSPredicate predicateWithFormat:@"description CONTAINS[cd] %@", theWord];
它有效,但它也会找到子词。
例如,给定
theWord
:Car
它也会处理这个
description
:A Christmas Carol
相反,我希望我的谓词只匹配
a
、或 christmas
或 carol
。(我正在使用核心数据和 NSFetchRequest。)
最佳答案
像这样的东西?
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.*";
关于cocoa-touch - "Whole word"通过 NSPredicate 在 NSString 中搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8559156/