【问题标题】:NSPredicate for NSString With Custom Format具有自定义格式的 NSString 的 NSPredicate
【发布时间】:2010-11-10 05:38:28
【问题描述】:

我想使用 NSPredicate 来匹配 NSString,但我在开始时遇到了麻烦。我的目标是匹配某些包含以下格式的 NSString。

  1. 成为---
  2. 最好的
  3. -----g

如果有人有简单的例子,将不胜感激。

【问题讨论】:

    标签: objective-c nsstring nspredicate


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案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"
      

      (@benoît 在他的回答中很好地观察到,这也可以通过正则表达式 [MATCHES 运算符] 来完成,它可以减少谓词格式字符串的长度)

      【讨论】:

      • 如果 '-' 的数量可以变化,你将如何匹配上面的那些字符串?
      • @aahrens "" = 0 个或多个字符,"?" = 1 个或多个字符,"??*" = 2 个或多个字符...所以“是*" 匹配任何以 "be" 开头的单词。 "be?*" 匹配任何以 "be" 开头且长度至少为 3 个字母等的单词。
      猜你喜欢
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-18
      • 2013-09-01
      • 1970-01-01
      • 2014-07-23
      相关资源
      最近更新 更多