2015-01-23 2 views
2

이 문자열에서 가져 오려고합니다. 5556007503140005 두 문자열. "555600750314"및 "0005"대상 -c에서 Regexp 일치 그룹이 작동하지 않습니다.

저는 정규 표현식 도구에서 잘 작동하는 정규 표현식 ^([a-z0-9]*)([0-9]{4})$을 사용하고 있습니다. 그러나이 코드를 내 코드에 사용할 때는 1 개만 찾습니다.

코드

-(NSDictionary *)parse_barcode:(NSString *)barcode { 
    NSString *regexp = @"^([a-z0-9]*)([0-9]{4})$"; 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regexp]; 

    if ([predicate evaluateWithObject:barcode]) { 
     NSError *error; 

     NSRegularExpression *regular_exp = [NSRegularExpression regularExpressionWithPattern:regexp options:0 error:&error]; 

     NSArray *matches = [regular_exp matchesInString:barcode options:0 range:NSMakeRange(0, [barcode length])]; 

     for (NSTextCheckingResult *match in matches) { 
      NSLog(@"match %@ :%@",[barcode substringWithRange:[match range]], match); 
     } 

    } 
    return nil; 
} 

입니다 그러나 경기는, 당신은 단지 올바르게 인쇄되지 않는 경우 항상 당신이 바로 그 일치를 얻을 전체 문자열 (바코드)

답변

3

입니다. 완벽하게 작동합니다 :)

for (NSTextCheckingResult *match in matches) { 
    for (int i = 0 ; i != match.numberOfRanges ; i++) { 
     NSLog(@"match %d - %@ :%@", i, [barcode substringWithRange:[match rangeAtIndex:i]], match); 
    } 
} 
+0

감사 :이 같은 각 그룹에 대해 rangeAtIndex:를 호출 한 후 개별 그룹 (괄호 안에 즉 섹션)을 얻을 수 numberOfRanges를 사용합니다. –

관련 문제