通过 NSPredicate 在 NSString 中进行“整个单词”搜索

2024-01-13

我想在属性中搜索description (an NSString实例)有一个给定的单词。

我尝试使用这个谓词:

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

它有效,但它也发现子词.

例如,给定theWord:

Car

它也会这个description:

圣诞节颂歌

相反,我希望我的谓词仅匹配a, or christmas, or carol.

(我正在使用 Core Data 和 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”。

另外,为了更好地覆盖非英语语言字符串,您应该启用 Unicode 单词边界检测,方法是设置w标志选项。匹配字符串将如下所示:

NSString *matchStr = @"(?w).*\\bCarol\\b.*"; 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 NSPredicate 在 NSString 中进行“整个单词”搜索 的相关文章

随机推荐