3

我正在尝试[word]\[word\]using替换NSRegularExpression

NSRegularExpression *metaRegex = [NSRegularExpression regularExpressionWithPattern:@"([\\[\\]])"
                                                                           options:0
                                                                             error:&metaRegexError];

NSString *escapedTarget = [metaRegex stringByReplacingMatchesInString:string
                                                              options:0
                                                                range:NSMakeRange(0, string.length)
                                                         withTemplate:@"\\$1"];

但是这个的输出是$1word$1。您会认为第一个字符\会转义第二个\字符,但它看起来像是在转义$字符...我如何告诉它转义\而不是转义$

4

2 回答 2

3

尝试:

@"\\\\$1"

用于替换模板。基本上:\\将转义\字符串,所以它是@"\$1"当它被发送到正则表达式时。然后\转义$模板中的 ,导致您的问题。

于 2012-07-13T22:54:13.190 回答
1

您实际上需要四个反斜杠,如下所示:

@"\\\\$1"

为什么需要这个笨重的系统?嗯,这样想吧。该\字符用作 C 转义字符正则表达式转义字符。所以,如果你创建一个只有一个反斜杠的表达式,你可能会得到一个错误,因为 NSString 本身会让你使用特殊字符\$。要转义斜线,您需要使用两个斜线,这将在最终的 NSString 数据中仅计算为一个。

但是,您确实需要将 NSString 本身中的两个反斜杠发送到正则表达式解析器,因此您需要转义字符串文字本身中的两个反斜杠。因此,\\\\解析为\\实际数据,然后正则表达式解析器将其折叠为单个文字\字符

于 2012-07-13T22:58:08.830 回答