我想使用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