2012-07-07 1 views
1

약어를 찾으려면 이라는 약어를 찾아 그 약어를 암 호화하고 전체 문자열을 반환하십시오.NSRegularExpression을 사용하여 각 일치 항목을

누군가가 도와 줄 수 있습니까? 아래 코드를 시도 할 때 예외가 발생합니다. 이것이 잘못된 경우 누군가 블록에서 원본 텍스트를 수정하는 방법에 대한 예를 들어주십시오.

- (NSString *) convertAllAbbreviationsToFullWords:(NSString *) textBlock { 

NSRegularExpression *matchAnyPotentialAbv = [NSRegularExpression regularExpressionWithPattern:@"[a-zA-Z\\.]+\\.\\s" options:0 error:nil]; 

[matchAnyPotentialAbv 
    enumerateMatchesInString:textBlock 
    options:0 
    range:NSMakeRange(0, [textBlock length]) 
    usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop) { 

     /* on each match, I would like to call convert(match) and 
      replace the result with the existing match in my textBlock */ 

     if (++count >= 200) *stop = YES; 
    } 
    ]; 
    return textBlock; 
} 
+1

당신은 아마 후행 공백과 일치하지 않습니다. 긍정적 인 선견자 :'[a-zA-Z.] + \\. (? = \\ s | \\ n | $)'를 사용하십시오. 실제 경기 결과와 일치하지만 실제로는 일치하지 않습니다. – Regexident

답변

11

역방향 검색을 시도해야합니다. 그렇지 않으면 처음 텍스트 범위가 더 이상 유효하지 않을 때 텍스트를 수정해야합니다. NSRegularExpression의 -replacementStringForResult:inString:offset:template:] API 아마이 할 수있는 청소기 방법을 제공하여

NSArray *results = [matchAnyPotentialAbv matchesInString:textBlock options:kNilOptions range:NSMakeRange(0, textBlock.length)]; 

for(NSTextCheckingResult *result in [results reverseObjectEnumerator]) 
{ 
    //Replace 
} 
+0

어둡지 만 작동합니다! – Berik