我正在尝试使用此谓词过滤字符串数组:
[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
。