0

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

[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];
4

1 回答 1

4

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

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

如果您有一个特定的数字aNumber并且想要查找“#ANY_CHARACTERS!<aNumber>”形式的所有字符串,那么以下应该可以工作:

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

于 2013-06-01T18:18:13.540 回答