2012-12-04 5 views
7

ich von zwei Zeichen (oder vielleicht zwei Tags)regex alle Teil zwischen zwei charachters zu extrahieren oder Tags

dies ist umgeben alle Fäden extrahieren müssen, was ich bisher getan habe:

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]); 

In myArray gibt es drei Objekte korrekt aber NSLog druckt diese:

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

statt DB1, DB2 und DB3

wo liege ich falsch?

danke

Antwort

20

Nach den documentationmatchesInString:options:range: gibt ein Array von NSTextCheckingResult nicht NSString s s. Sie müssen die Ergebnisse durchlaufen und die Bereiche verwenden, um die Teilstrings zu erhalten.

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, danke !! – Janky

Verwandte Themen