2010-12-01 20 views
1

j'ai un NSArray dont le contenu des chaînes avec un format similaire à: [AZ] {+} - [0-9] {+}NSPredicates beginsWith

donc en gros un tas de répétition des caractères alphabétiques, un séparateur , puis 1 ou plusieurs chiffres si

Je veux filtrer par les valeurs du tableau qui correspondent au séparateur, mais je ne peux pas sembler indiquer explicitement dans le format de mon predicator:

NSPredicate *aPredicate = [NSPredicate predicateWithFormat:@"self BEGINSWITH %@", aValue]; 
NSArray *filtered = [entries filteredArrayUsingPredicate:aPredicate]; 

Comment Contrassez-vous le filtrage pour un tel cas?

Répondre

1

Vous pouvez utiliser le "Corresp" opérateur de faire une recherche d'expression régulière, comme suit:

NSPredicate * p = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", @"[a-z]+-.*"]; 
NSArray * s = [NSArray arrayWithObject:@"abc-123"]; 
NSLog(@"%@", [s filteredArrayUsingPredicate:p]); 

Il y a une mise en garde, cependant. L'expression régulière est mise en correspondance sur toute la chaîne. Donc, si vous voulez trouver tous les éléments qui commencent par 3 lettres, votre expression ne peut pas être simplement "[a-z] {3}". Ce doit être "[a-z] {3}. *". Le premier échouera pour tout ce qui n'est pas 3 lettres, alors que le second correspondra à tout ce qui est au moins 3 lettres.

Ça m'a pris un moment pour réaliser ceci ...