これは、ソース文字列に二重スラッシュが含まれていないためです。すべての二重スラッシュは、文字列定数を作成するプロセスでコンパイラによって消費され、最終的な文字列に到達するために単一のスラッシュに置き換えられます。
\u597d\u6f02\u4eae\u7684\u5a5a
文字列定数内でスラッシュを使用する場合、1 つのスラッシュを表すために 2 つのスラッシュが必要です。正規表現に渡す文字列定数内でスラッシュを使用する場合、4 つのスラッシュが必要です。4 つのうち 2 つがコンパイラによって使用され、残りの 2 つのうちの 1 つが正規表現コンパイラによって使用されます。
これはあなたが期待したことをするあなたの例です:
NSString *str =@"\\\\u597d\\\\u6f02\\\\u4eae\\\\u7684\\\\u5a5a";
NSLog(@"%@", str);
str= [str stringByReplacingOccurrencesOfString: @"\\\\" withString: @"\\" ];
NSLog(@"%@", str);
出力は次のようになります。
\\u597d\\u6f02\\u4eae\\u7684\\u5a5a
\u597d\u6f02\u4eae\u7684\u5a5a