ios - NSPredicate not filtering as desired -


consider following array:

nsarray *datavalues = @[@"foo[0]", @"foo[1].bar"]; 

and following regex pattern, predicate , expected output:

nsstring *pattern = @"foo[0]"; nspredicate *predicate = [nspredicate predicatewithformat: @"self beginswith[cd] %@", pattern]; nsarray *results = [datavalues filteredarrayusingpredicate: predicate]; nslog(@"matches = %ld", (long)results.count); 

this prints 1 in console expected. if change pattern to:

nsstring *pattern = @"foo\\[[0-9]\\]"; 

i expect print 2 in console, prints 0. have double escaped outer square brackets allow them parsed , expect find strings have numbers 0 9 inside brackets match expression.

i have checked regex against following site, work correctly:

http://regexr.com/3bcut

i have no warnings/errors in xcode (6.4, 6e35b) running against ios 8.4 iphone 6 plus simulator, why regex not filter expected?

you try depending on needs are:

    nsarray *datavalues = @[@"foo[0]", @"foo[1].bar"];     nsstring *pattern = @"foo[*]*";     nspredicate *predicate = [nspredicate predicatewithformat: @"self %@", pattern];     nsarray *results = [datavalues filteredarrayusingpredicate: predicate];     nslog(@"matches = %ld", (long)results.count); 

you go little more basic , use

    nsmutablearray *results = [nsmutablearray array];     (nsstring *str in datavalues) {         if ([str rangeofcharacterfromset:[nscharacterset decimaldigitcharacterset]].location != nsnotfound) {             if ([str hasprefix:@"foo["]) {                 [results addobject:str];             }         }     }     nslog(@"matches = %ld", (long)results.count); 

Comments