NSRegularExpression添加转义字符

时间:2012-07-13 22:49:29

标签: objective-c ios regex

我正在尝试使用[word]\[word\]替换为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。您会认为第一个\将逃脱第二个\字符,但它看起来像是在逃避$字符...我如何告诉它逃脱\和不是$

2 个答案:

答案 0 :(得分:3)

尝试:

@"\\\\$1"

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

答案 1 :(得分:0)

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

@"\\\\$1"

为什么需要这种笨拙的系统?好吧,这样想吧。 \字符用作C转义字符正则表达式转义字符。因此,如果您创建一个只有一个反斜杠的表达式,则可能会出现错误,因为NSString本身就会使用特殊字符\$。要转义斜杠,需要使用两个斜杠,它将在最终的NSString数据中仅计算为一个斜杠。

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