Stack Overflow または Google で述語内の角括弧を見つける方法を具体的に説明したものは何も見つからなかったので、ここに投稿して、誰かが解決策を説明できるかどうかを確認します。
NSString *mstr = @"fasd[981db7007771ffa3]dfaads";
NSString *test =@".*\\[[0-9,a-f]{16}\\].*";
//NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES '.*\\\\[[0-9,a-f]{16}\\\\].*'"]; //works
NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", test];
if ([pred evaluateWithObject:mstr]) {
NSLog(@"Yes");
}
ブラケットをインラインでエスケープするときは 4 つのバックスラッシュが必要なようですが、文字列に入れる場合は 2 つだけで済みます。なぜそうなのかは明らかではありません。