RegEx:如何在NSPredicate中使用正则表达式?

Chr*_*Lin 3 regex nspredicate ios

我有一个表视图按人名属性显示行.表视图允许用户通过名称进行繁琐的搜索.例如,如果用户输入'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];
}
Run Code Online (Sandbox Code Playgroud)

以及其他方法:

 self.resultArray = [self.allPlayers filteredArrayUsingPredicate:self.searchPredicate];
Run Code Online (Sandbox Code Playgroud)

但结果没有回来......请帮助我,谢谢!

Thi*_*ama 5

问题解决了

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

1)用%@替换'%@'

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


谓词应该是这样的,

[NSPredicate predicateWithFormat:@"SELF.name MATCHES [c] %@", self.format];
Run Code Online (Sandbox Code Playgroud)

最后这个方法,

- (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];
}
Run Code Online (Sandbox Code Playgroud)