objective-c - nspredicate objective c
NSPredicar concordancia exacta con cadena (2)
Tengo una NSPredicate como esta:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"entity.name CONTAINS %@", myString];
Pero eso devolverá cualquier cosa que contenga esa cadena. Por ejemplo: si my entity.name está donde:
text
texttwo
textthree
randomtext
y el myString
era text
entonces todas esas cadenas coincidirían. Me gustaría que si myString
es text
, solo devuelva el primer objeto con el nombre de text
y si myString
fuera de texto randomtext
devolverá el cuarto objeto con el nombre de texto randomtext
. También estoy buscando que sea insensible a las mayúsculas y que ignora el espacio en blanco
Esto debería hacerlo:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"entity.name LIKE[c] %@", myString];
LIKE
coincide con cadenas? y * como comodines. El [c]
indica que la comparación debe ser insensible a mayúsculas y minúsculas.
Si no quieres? y * para ser tratados como comodines, puede usar ==
lugar de LIKE
:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"entity.name ==[c] %@", myString];
Más información en la documentation sintaxis de cadena de formato predicado NSPredicate.
Puede usar el matcher de expresiones regulares con su predicado, así:
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];
El fragmento de código anterior construye una expresión regular que coincide con cadenas con espacios en blanco opcionales al principio y / o al final, con la palabra de destino rodeada por los marcadores de "límite de palabra" /b
. La [c]
después de las matches
significa "unir insensiblemente las mayúsculas y minúsculas".
Este ejemplo usa una matriz de cadenas; para que funcione en su entorno, reemplace SELF
con entity.name
.