как использовать регулярные выражения 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. Есть ли способ изменить NSString с помощью NSMutableArray и сохранить NSTextCheckingResult в NSMutableArray с именем filterArray?

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


person just ME    schedule 25.10.2013    source источник


Ответы (1)


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

So, 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. Пожалуйста, см. этот вопрос для ответа как:) Как вы используете NSAttributedString? После вы сформировали строку с атрибутами, установите ее в текстовое поле:

    NSAttributedString * attributedString;
    UITextField *textField;
    [ttextField setAttributedText:attributedString];
person Alexander Tkachenko    schedule 25.10.2013
comment
почему существует проверка NSLog(@String #%i.: %@,idx, [str substringWithRange:[match rangeAtIndex:0]]); не отображает всю строку? - person just ME; 25.10.2013
comment
Он должен отображать только подстроку, соответствующую регулярному выражению. - person Alexander Tkachenko; 25.10.2013