2011年3月21日月曜日

正規表現のメタ文字をエスケープした文字列を返す

参考:
NSArray と NSPredicate を使った正規表現検索 / Cocoaの日々 - 2005年10月
Regular Expression Metacharacters / Regular Expressions - ICU User Guide
感謝

コード:
- (NSString *)escapedStringWithString:(NSString *)string
{
NSString *value= [NSString stringWithString:string];
NSString *targets= @"\*?+[(){}^$|./";
NSInteger i;
for(i= 0; i<[targets length]; i++) {
NSString *findC= [targets substringWithRange:NSMakeRange(i, 1)];
NSString *replaceS= [NSString stringWithFormat:@"\\\\%@", findC];
value= [value stringByReplacingOccurrencesOfString:findC
withString:replaceS];
}
return value;
}

バックスラッシュについては一番最初に行うことで,エスケープ用のバックスラッシュが置換されないようにしている.
きっともっと賢いやり方や一撃メソッドがあるんだとは思う.

0 件のコメント: