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
.