NSRegularExpression添加转义字符
问题描述:
我试图用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
。你会认为第一个\
会逃脱第二个\
字符,但它看起来像逃避$
字符......我怎么告诉它逃离\
而不是$
?
答
尝试:
@"\\\\$1"
用于替换模板。基本上:\\
将跳过\
的字符串,所以它的@"\$1"
发送到正则表达式。 \
然后转义模板中的$
,导致您的问题。
答
你确实需要四个反斜杠,像这样:
@"\\\\$1"
为什么需要这个不方便的系统?那么,就这样想吧。 \
字符用作C转义字符和正则表达式转义字符。所以,如果你创建一个只有一个反斜杠的表达式,你可能会得到一个错误,因为NSString本身就是你使用特殊字符\$
的东西。为了避免斜杠,你需要使用两个斜杠,这些斜杠将在最终的NSString数据中仅评估一个斜杠。
但是,你确实需要在NSString本身中将两个反斜杠发送到正则表达式解析器,所以你需要在字符串本身中转义两个反斜杠。因此,\\\\
在实际数据中解析为\\
,然后正则表达式解析器将其折叠为单个文字\
字符