这是我的代码:
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)。为什么?我想替换'&lt;'之间的任何字符和'&gt;'包括'&lt;'和'&gt;'只是一个空间。
答案 0 :(得分:3)
我猜这与您在regex
中为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:@" "];