2012-07-13 36 views
3

我试图用NSRegularExpression\[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

尝试:

@"\\\\$1" 

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

0

你确实需要四个反斜杠,像这样:

@"\\\\$1" 

为什么需要这个不方便的系统?那么,就这样想吧。 \字符用作C转义字符正则表达式转义字符。所以,如果你创建一个只有一个反斜杠的表达式,你可能会得到一个错误,因为NSString本身就是你使用特殊字符\$的东西。为了避免斜杠,你需要使用两个斜杠,这些斜杠将在最终的NSString数据中仅评估一个斜杠。

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