2012-12-04 12 views
7

muszę wyodrębnić wszystkie łańcuchy otoczone dwoma znakami (albo dwa znaczniki)regex wyodrębnić wszystkie podciągi między dwoma charachters lub tagi

to co robiłem do tej pory:

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\[(.*?)\\]" options:NSRegularExpressionCaseInsensitive error:NULL]; 

    NSArray *myArray = [regex matchesInString:@"[db1]+[db2]+[db3]" options:0 range:NSMakeRange(0, [@"[db1]+[db2]+[db3]" length])] ; 

    NSLog(@"%@",[myArray objectAtIndex:0]); 
    NSLog(@"%@",[myArray objectAtIndex:1]); 
    NSLog(@"%@",[myArray objectAtIndex:2]); 

W myArray istnieją trzy obiekty poprawnie ale NSLog drukuje to:

<NSSimpleRegularExpressionCheckingResult: 0x926ec30>{0, 5}{<NSRegularExpression: 0x926e660> \[(.*?)\] 0x1} 
<NSSimpleRegularExpressionCheckingResult: 0x926eb30>{6, 5}{<NSRegularExpression: 0x926e660> \[(.*?)\] 0x1} 
<NSSimpleRegularExpressionCheckingResult: 0x926eb50>{12, 5}{<NSRegularExpression: 0x926e660> \[(.*?)\] 0x1} 

zamiast baza1, DB2 i DB3

gdzie się mylę?

dziękuję

Odpowiedz

20

Według documentationmatchesInString:options:range: zwraca tablicę NSTextCheckingResult nie s NSString s. Będziesz musiał zapętlić wyniki i użyć zakresów, aby uzyskać podciągi.

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\[(.*?)\\]" options:NSRegularExpressionCaseInsensitive error:NULL]; 

NSString *input = @"[db1]+[db2]+[db3]"; 
NSArray *myArray = [regex matchesInString:input options:0 range:NSMakeRange(0, [input length])] ; 

NSMutableArray *matches = [NSMutableArray arrayWithCapacity:[myArray count]]; 

for (NSTextCheckingResult *match in myArray) { 
    NSRange matchRange = [match rangeAtIndex:1]; 
    [matches addObject:[input substringWithRange:matchRange]]; 
    NSLog(@"%@", [matches lastObject]); 
} 
+0

ok, dziękuję !! – Janky

Powiązane problemy