2013-10-25 1 views
0

Я следующий код, который работает:как использовать регулярные выражения NSRegularExpression для NSMutableArray

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[a-cA-C2][m-oM-O][a-cA-C2]" options:0 error:NULL]; 
    NSString *str = @"Ana"; 
    NSTextCheckingResult *match1 = [regex firstMatchInString:str options:0 range:NSMakeRange(0, [str length])]; 

    NSLog(@"check is exist: %@", [str substringWithRange:[match1 rangeAtIndex:0]]); 

Вот мои вопросы:

1.Is там, как я могу изменить NSString с NSMutableArray и сохранить NSTextCheckingResult в NSMutableArray, называемом filterArray?

2. Как выделить соответствующие значения при отображении в текстовом поле?

ответ

0

Если я правильно понимаю ваш вопрос, вы должны использовать NSArray строк и получать NSArray для сопоставления результатов для каждой строки.

Итак, 1:

NSArray *arrayOfStrings = /* Your array */; 

    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[a-cA-C2][m-oM-O][a-cA-C2]" options:0 error:NULL]; 
    NSMutableArray *filterArray = [NSMutableArray array]; 
    [arrayOfStrings enumerateObjectsUsingBlock:^(NSString * str, NSUInteger idx, BOOL * stop) { 
     NSTextCheckingResult *match = [regex firstMatchInString:str options:0 range:NSMakeRange(0, [str length])]; 
     if (match) { 
      [filterArray addObject:match]; 
     } 
     else { 
      [filterArray addObject:[NSNull null]]; 
     } 

     NSLog(@"String #%i. check is exist: %@",idx, [str substringWithRange:[match rangeAtIndex:0]]); 
    }]; 

2: Для выделения диапазонов строки вам необходимо использовать NSAttributedString. Пожалуйста, смотрите на этот вопрос ответ, как :) How do you use NSAttributedString? После формируется приписывали строка, установите его в текстовое поле:

NSAttributedString * attributedString; 
    UITextField *textField; 
    [ttextField setAttributedText:attributedString]; 
+0

почему NSLog (@ "Строка #% я проверка существует:.% @", IDX, [str substringWithRange: [match rangeAtIndex: 0]]); Не отображает ли целая строка? –

+0

Он должен отображать только подстроку, соответствующую регулярному выражению –