1

这是我的代码:

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);
}

我的 'modifiedString' 正在返回 (null)。为什么?我想用空格替换 '<' 和 '>' 之间的任何字符,包括 '<' 和 '>'。

4

1 回答 1

3

我猜这与您将自动释放的对象分配给regexin有很大关系viewDidLoad。尝试retain在方法中添加或移动该行findWord

正则表达式

匹配<和之间所有内容的正则表达式>不正确。正确的方法是,

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:@" "];
于 2011-06-27T13:21:25.563 回答