我想使用NSPredicate来匹配NSString,但我无法入门。我的目标是匹配某些包含格式的NSString。NSPredicate为NSString与自定义格式
- 是---
- 是-TT
- -----克
如果任何人具有将不胜感激简单的例子。
我想使用NSPredicate来匹配NSString,但我无法入门。我的目标是匹配某些包含格式的NSString。NSPredicate为NSString与自定义格式
如果任何人具有将不胜感激简单的例子。
您可以使用您自己的比较代码创建一个含有+predicateWithBlock:
的NSPredicate。
或使用regex(也许是最好的解决方案):
[NSPredicate predicateWithFormat:@"SELF MATCHES '(be...)|(be.tt)|(.....g)'"]
一个简单的方法来做到这一点是使用了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
运营商],这样可以减少对谓词格式字符串的长度来实现良好的观察)
如果' - '的数目可能会有所不同,那么如何匹配上面的那些字符串? – aahrens 2010-11-10 13:26:25
@aahrens“*”= 0或更多字符,“?*”= 1或更多字符,“?? *”= 2或更多字符......所以“be *”匹配任何以“be”开头的单词。 “be?*”匹配任何以“be”开头并且至少3个字母等的单词。 – 2010-11-10 16:55:28
谢谢,这有助于我走上正确的轨道 – aahrens 2010-11-10 13:02:26