我正在尝试使用此谓词过滤字符串数组:

[NSPredicate predicateWithFormat:@"SELF LIKE[c] '#*!%d'", aNumber]


每个类似于#WILDCARD!ANY_NUMBER的字符串都是有效的。

但这不起作用:(
你能帮助我吗?

编辑:

NSString *pattern = [@"#*!" stringByAppendingFormat:@"%d", numberVariable];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];
NSArray *filteredArray = [anArray filteredArrayUsingPredicate:pred];


数组anArray包含类似#0!-1(numberVariable为-1)的字符串,但数组filterdArray为空。因此,正则表达式不起作用。

编辑:

我的解决方案:

NSString *pattern = [@"#.*!\\" stringByAppendingFormat:@"%d", numberVariable];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", pattern];
NSArray *filteredArray = [anArray filteredArrayUsingPredicate:pred];

最佳答案

要查找带有任意数字的所有看起来像“ #ANY_CHARACTERS!ANY_NUMBER”的字符串,您需要带有正则表达式的“ MATCHES”运算符:

NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", @"#.*!\\d+"];
NSArray *filtered = [yourArray filteredArrayUsingPredicate:pred];


如果您有特定的数字aNumber,并且想要查找该格式的所有字符串
“ #ANY_CHARACTERS!”,则以下内容应起作用:

NSString *pattern = [@"#*!" stringByAppendingFormat:@"%d", aNumber];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF LIKE %@", pattern];
NSArray *filtered = [yourArray filteredArrayUsingPredicate:pred];


您的问题

[NSPredicate predicateWithFormat:@"SELF LIKE[c] '#*!%d'", aNumber]


是引号内的%d未被替换为aNumber

10-07 13:44