2010-11-10 70 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