2010-11-10 116 views
0

我想使用NSPredicate来匹配NSString,但我无法入门。我的目标是匹配某些包含格式的NSString。NSPredicate为NSString与自定义格式

  1. 是---
  2. 是-TT
  3. -----克

如果任何人具有将不胜感激简单的例子。

回答

3

您可以使用您自己的比较代码创建一个含有+predicateWithBlock:的NSPredicate。

或使用regex(也许是最好的解决方案):

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

谢谢,这有助于我走上正确的轨道 – aahrens 2010-11-10 13:02:26

2

一个简单的方法来做到这一点是使用了LIKE操作。使用此字符串运算符,可以使用特殊字符*?*的意思是“0个或更多字符”,而?的意思是“只有一个字符”。所以,你可以这样做:

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

(@伯努瓦使得他的答案,这也可以用正则表达式[中MATCHES运营商],这样可以减少对谓词格式字符串的长度来实现良好的观察)

+0

如果' - '的数目可能会有所不同,那么如何匹配上面的那些字符串? – aahrens 2010-11-10 13:26:25

+0

@aahrens“*”= 0或更多字符,“?*”= 1或更多字符,“?? *”= 2或更多字符......所以“be *”匹配任何以“be”开头的单词。 “be?*”匹配任何以“be”开头并且至少3个字母等的单词。 – 2010-11-10 16:55:28