NSRegularExpressionを用いると文字列の検索、置換が容易にできます。しかし、以下のように置換される文字列の先頭の大文字小文字の別を維持したまま置換することは正規表現だけでは難しいです。
hogeをpoiに置換
hoge -> poi
Hoge -> Poi
この処理を拙作Arrow Noteに実装したので、コードを公開します。
Objective-C
-(NSString*) replaceString:(NSString*)search with:(NSString*)replace in:(NSString*)text
{
NSRegularExpression *regex
= [NSRegularExpression regularExpressionWithPattern:search
options:NSRegularExpressionCaseInsensitive
error:nil];
NSMutableString *target = [[NSMutableString alloc]
initWithString:text];
NSTextCheckingResult *r = [regex firstMatchInString:target
options:0
range:NSMakeRange(0, target.length)];
while (nil != r && NSNotFound != r.range.location) {
NSString *src = [target substringWithRange:r.range];
NSString *rep = [regex replacementStringForResult:r
inString:target
offset:0
template:replace];
if (0 < src.length && 0 < rep.length
&& isupper([src characterAtIndex:0])) {
rep = [[NSString alloc] initWithFormat:@"%c%@",
toupper([rep characterAtIndex:0]),
[rep substringFromIndex:1]];
}
[target replaceCharactersInRange:r.range withString:rep];
NSUInteger nextPos = r.range.location + rep.length;
r = [regex firstMatchInString:target
options:0
range:NSMakeRange(nextPos, target.length - nextPos)];
}
return target;
}