2013-06-01 99 views
0

我试图过滤字符串数组与此断言:NSPredicate搜索LIKE

[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是空的,所以正则表达式不起作用

编辑:。

我的解决方案:

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

您使用'%如果'aNumber'属于'int'类型,那么'd''什么是#*? – CainaSouza

+0

如果你的描述说你想匹配任何数字,那么'aNumber'是什么 – Wain

回答

5

要找到像所有字符串与任意数量,你需要“匹配”运营商正则表达式:

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取代

+0

谢谢..但这不起作用: - /我用我的新代码编辑帖子..任何想法? – Maik639

+0

@ Maik639:你没有完全复制我的第二个代码示例,在这种情况下,它应该是“自己喜欢”而不是“自我匹配”。 –

+0

好的..你的更新后的文章帮了我很多。我用我的解决方案更新了这篇文章。谢谢! – Maik639