stringByReplacingMatchesInString: возвращает (null) - PullRequest
1 голос
/ 27 июня 2011

Вот мой код:

NSRegularExpression * regex;

- (void)viewDidLoad {
    NSError *error = NULL;
    regex = [NSRegularExpression regularExpressionWithPattern:@"<*>" options:NSRegularExpressionCaseInsensitive error:&error];
}

- (IBAction)findWord {  
    NSString * fileContents=[NSString stringWithContentsOfFile:[NSString stringWithFormat:@"%@/report1_index1_page1.html", [[NSBundle mainBundle] resourcePath]]];
    NSLog(@"%@",fileContents);

    NSString * modifiedString = [regex stringByReplacingMatchesInString:fileContents
                                                                options:0
                                                                  range:NSMakeRange(0, [fileContents length])
                                                           withTemplate:@"$1"];

    NSLog(@"%@",modifiedString);
}

Моя'ifiedString 'возвращает (ноль). Почему? Я хочу заменить любые символы между' <'и'> ', включая' <'и'>'просто пробел.

1 Ответ

3 голосов
/ 27 июня 2011

Я предполагаю, что это во многом связано с тем, что вы присваиваете автоматически выпущенный объект regex в viewDidLoad. Попробуйте добавить retain или переместите строку в метод findWord.

Regex

Неверное регулярное выражение для сопоставления всего между < и >. Правильный путь будет,

NSError *error = nil;
NSRegularExpression * regex = [NSRegularExpression regularExpressionWithPattern:@"(?<=<).*(?=>)" options:NSRegularExpressionCaseInsensitive error:&error];
if ( error ) {
    NSLog(@"%@", error);
}

Заменить пробелом

Если вы хотите заменить совпавшую строку на " ", вам не следует передавать $1 в качестве шаблона. Вместо этого используйте " " в качестве шаблона.

NSString * modifiedString = [regex stringByReplacingMatchesInString:fileContents
                                                            options:0
                                                              range:NSMakeRange(0, [fileContents length])
                                                       withTemplate:@" "];
...