2010-11-10 12 views
0

J'aimerais utiliser NSPredicate pour faire correspondre NSString mais j'ai des problèmes pour démarrer. Mon but est de faire correspondre certains NSStrings qui contiennent les formats de.NSPredicate pour NSString avec format personnalisé

  1. être ---
  2. be-tt
  3. ----- g

Si quelqu'un a des exemples simples qui seraient grandement appréciés.

Répondre

3

Vous pouvez créer un NSPredicate avec +predicateWithBlock: avec votre propre code de comparaison.

ou à l'aide regex (peut-être la meilleure solution):

[NSPredicate predicateWithFormat:@"SELF MATCHES '(be...)|(be.tt)|(.....g)'"] 
+0

Merci, cela m'a aidé à me mettre sur la bonne voie – aahrens

2

Une façon simple de le faire serait d'utiliser l'opérateur LIKE. Avec cet opérateur de chaîne, vous pouvez utiliser le caractère spécial * et ?. * signifie "0 caractères ou plus", et ? signifie "exactement un caractère". Ainsi, vous pouvez faire:

NSPredicate * p = [NSPredicate predicateWithFormat:@"SELF LIKE %@ OR SELF LIKE %@ OR SELF LIKE %@", @"be???", @"be?tt", @"?????g"]; 
NSLog(@"%d", [p evaluateWithObject:@"beast"]); //logs "1" 

(@ benoît fait une bonne observation dans sa réponse que cela peut aussi être accompli avec une expression régulière [l'opérateur MATCHES], ce qui peut réduire la longueur de la chaîne de format sous-jacente

+0

Comment iriez-vous faire correspondre ces chaînes ci-dessus si le nombre de '-' pouvait varier? – aahrens

+0

@aahrens "*" = 0 ou plusieurs caractères, "? *" = 1 ou plusieurs caractères, "?? *" = 2 caractères ou plus ... "be *" correspond à tout mot commençant par "be". "be? *" correspond à tout mot qui commence par "be" et qui a au moins 3 lettres, etc. –