NSPredicate与string完全匹配

我有这样一个NSPredicate:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"entity.name CONTAINS %@", myString]; 

但是,这将返回包含该string的任何东西。 例如:如果我的entity.name的其中:

 text texttwo textthree randomtext 

myStringtext那么所有这些string将匹配。 我喜欢它,如果myStringtext它只会返回名称text的第一个对象,如果myStringrandomtext text ,它将返回名称为randomtext的第四个对象。 我也正在寻找它是不区分大小写 ,它忽略空白

这应该做到这一点:

 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"entity.name LIKE[c] %@", myString]; 

LIKE匹配string? 和*作为通配符。 [c]表示比较应该不区分大小写。

如果你不想要? 和*被视为通配符,您可以使用==代替LIKE

 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"entity.name ==[c] %@", myString]; 

NSPredicate谓词格式string语法文档中的更多信息。

您可以使用正则expression式匹配器来处理谓词,如下所示:

 NSString *str = @"test"; NSMutableString *arg = [NSMutableString string]; [arg appendString:@"\\s*\\b"]; [arg appendString:str]; [arg appendString:@"\\b\\s*"]; NSPredicate *p = [NSPredicate predicateWithFormat:@"SELF matches[c] %@", arg]; NSArray *a = [NSArray arrayWithObjects:@" test ", @"test", @"Test", @"TEST", nil]; NSArray *b = [a filteredArrayUsingPredicate:p]; 

上面的代码构造了一个正则expression式,它匹配在开始和/或结束时带有可选空白的string,目标单词由“单词边界”标记\b包围。 matches后的[c]表示“不区分大小写”。

这个例子使用一个string数组; 要使其在您的环境中工作,请用entity.namereplaceSELF