【问题标题】:RegEx: how to use regular expression with NSPredicate?RegEx:如何在 NSPredicate 中使用正则表达式?
【发布时间】:2013-05-10 03:22:17
【问题描述】:

我有一个按人名属性显示行的表格视图。表格视图允许用户按名称进行繁琐的搜索。例如如果用户输入“crp”,它将匹配名称“Chris Paul”。

我有一个方法,它接受一个搜索字符串并设置 NSPredicate 在数组中搜索模型的名称

- (void)setPredicateWithText: (NSString *)searchText
{

    for (int i = 0; i < searchText.length; i ++)
    {
        NSString *character = [searchText substringWithRange:NSMakeRange(i, 1)];
        self.format = [self.format stringByAppendingFormat:@".*%@",character];

        if (i == searchText.length -1) // last character
        {
          self.format = [self.format stringByAppendingString:@".*"];
        }
    }
    // result format == .*c.*r.*p.*
    self.searchPredicate = [NSPredicate predicateWithFormat:@"SELF.name MATCHES '%@'", self.format];
}

还有其他方法:

 self.resultArray = [self.allPlayers filteredArrayUsingPredicate:self.searchPredicate];

但没有任何结果...请帮助我,谢谢!

【问题讨论】:

    标签: ios regex nspredicate


    【解决方案1】:

    问题已解决

    您应该在代码中更改两件事,

    1) 将“%@”替换为 %@

    2) 添加[c]忽略大小写


    谓词应该是这样的,

    [NSPredicate predicateWithFormat:@"SELF.name MATCHES [c] %@", self.format];
    

    最后是方法,

    - (void)setPredicateWithText: (NSString *)searchText
    {
    
        for (int i = 0; i < searchText.length; i ++)
        {
            NSString *character = [searchText substringWithRange:NSMakeRange(i, 1)];
            self.format = [self.format stringByAppendingFormat:@".*%@",character];
    
            if (i == searchText.length -1) // last character
            {
                self.format = [self.format stringByAppendingString:@".*"];
            }
        }
        // result format == .*c.*r.*p.*
        self.searchPredicate = [NSPredicate predicateWithFormat:@"SELF.name MATCHES [c] %@", self.format];
    }
    

    【讨论】:

      【解决方案2】:

      通过删除引号解决了问题:MATCHES %@ 而不是MATCHES '%@'。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多