2012-07-13 42 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本身中將兩個反斜槓發送到正則表達式解析器,所以你需要在字符串本身中轉義兩個反斜槓。因此,\\\\在實際數據中解析爲\\,然後正則表達式解析器將其摺疊爲單個文字\字符