NSPredicate 按单词匹配字符串

nik*_*dia 2 objective-c nsstring nspredicate ios swift

我有一个字符串数组,如下所示:

["Milk","Milkshake","Milk Shake","MilkCream","Milk-Cream"]
Run Code Online (Sandbox Code Playgroud)

如果我搜索“牛奶”,那么结果应该是["Milk","Milk Shake","Milk-Cream"]按词搜索。

谓词为

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"tagName CONTAINS[c] %@",containSearchTerm];
Run Code Online (Sandbox Code Playgroud)

我从上面的数组中得到所有结果。如何使用单词进行匹配?

Mar*_*n R 5

您需要一个“正则表达式搜索”来匹配单词边界,这是在谓词中使用“MATCHES”完成的。这是一个示例(本质上是从带有核心数据的 NSPredicate翻译而来,在字符串属性中搜索带有边界的单词到 Swift):

let searchTerm = "milk"
let pattern = ".*\\b\(NSRegularExpression.escapedPattern(for: searchTerm))\\b.*"
let predicate = NSPredicate(format: "tagName MATCHES[c] %@", pattern)
Run Code Online (Sandbox Code Playgroud)

这将搜索tagName包含给定搜索词的所有条目,并被“单词边界”(\b模式)包围。