NSRegularExpression奇怪的行为

时间:2014-02-04 02:35:45

标签: objective-c regex nsregularexpression

我试图弄清楚这几个小时,在互联网上找不到任何类似的东西,所以希望你能帮帮我..

我正在尝试替换NSString中的单个字符,应该很简单吧? 这就是我所做的:

NSError *error;
NSString *str1 = @"E bis the EVE E on E is the  the hte ee e.";
NSString *str2 = @"E abis the EVE E on E is the  the hte ee e.";

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\bE\\b"
                                                       options:NSRegularExpressionCaseInsensitive
                                                       error:&error];


int numberOfMatches1 = [regex numberOfMatchesInString:str1
                                               options:0
                                               range:NSMakeRange(0, [str1 length])];
int numberOfMatches2 = [regex numberOfMatchesInString:str2
                                               options:0
                                               range:NSMakeRange(0, [str2 length])];
NSLog(@"%d, %d",numberOfMatches1,numberOfMatches2);

NSString *modifiedStr1 = [regex stringByReplacingMatchesInString:str1
                                               options:0
                                               range:NSMakeRange(0, [str1 length])
                                               withTemplate:@"O"];

NSString *modifiedStr2 = [regex stringByReplacingMatchesInString:str2
                                               options:0
                                               range:NSMakeRange(0, [str2 length])
                                               withTemplate:@"O"];

NSLog(modifiedStr1);
NSLog(modifiedStr2);

这个想法是用O替换所有单个E(也在字符串的开头和结尾),并保留所有其他的。 在第一个字符串中,这按预期工作,但是当我向字符串添加一些东西时,在这种情况下,在第二个位置上的'a'我得到误报。 输出是:

4,5(str1和str2的匹配数nr)

O O O上的EVE O就是O.< --- correct

O abis O上的EVE O就是那个O.< --- false,它取代了''中的'e'

我做错了什么?

1 个答案:

答案 0 :(得分:0)

除了编译器警告之外,您的两个int应该是NSUInteger,而格式字符串中需要%lu,最后两个NSLog调用应该有一个格式字符串 - 你在显示的代码中没有任何错误,它按预期工作(在10.8.5上使用Xcode 5.0.2测试)。

所以你的问题在其他地方。逐步调试调试器中的代码,记录所有指针值等,希望你能找到它。