NSPredicate Exact Match with String NSPredicate Exact Match with String objective-c objective-c

NSPredicate Exact Match with String


This should do it:

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

LIKE matches strings with ? and * as wildcards. The [c] indicates that the comparison should be case insensitive.

If you don't want ? and * to be treated as wildcards, you can use == instead of LIKE:

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

More info in the NSPredicate Predicate Format String Syntax documentation.


You can use regular expression matcher with your predicate, like this:

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];

The piece of code above constructs a regular expression that matches strings with optional blanks at the beginning and/or at the end, with the target word surrounded by the "word boundary" markers \b. The [c] after matches means "match case-insensitively".

This example uses an array of strings; to make it work in your environment, replace SELF with entity.name.