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:
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
Post a Comment