ios - NSPredicate 按单词匹配字符串

标签 ios objective-c swift nsstring nspredicate

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

["Milk","Milkshake","Milk Shake","MilkCream","Milk-Cream"]

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

用谓词as

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"tagName CONTAINS[c] %@",containSearchTerm];

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

最佳答案

您需要一个“正则表达式搜索”来匹配单词边界,这是通过谓词中的“MATCHES”完成的。这是一个示例(基本上从 NSPredicate with core data, search word with boundaries in string attribute 翻译成 Swift):

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

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

关于ios - NSPredicate 按单词匹配字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54984096/

相关文章:

ios - socket.io swift 无法在真实设备上运行

ios - 从 iOS 媒体库中获取所有艺术家的列表

iphone - 使用sqlite3_column_double检索浮点值

ios - Today Extension 在 iOS 8.1.2 上启动前崩溃

iphone - 如何使用圆点而不是点制作自定义 UIPageControl

swift - AlamoFire.Request 中的多个参数

ios - 在 iPhone 6 和 6 Plus 上设置 ImageView 的圆角半径是不完美的

ios - 当音频工作未激活时禁用应用程序的后台模式

swift - 如何刷新用SDWebImage缓存的tableView中的存储引用数据?

swift - Alamofire responseJSON 中Struct返回Void的理解