2011-10-22 20 views
4

我有以下的正則表達式我想在Objective-C的逃生如何在Objective-C中正確轉義這個正則表達式?

/\B\$((?:[0-9]+(?=[a-z])|(?![0-9\.\:\_\-]))(?:[a-z0-9]|[\_\.\-\:](?![\.\_\.\-\:]))*[a-z0-9]+)/ig; 

不完全知道如何逃避它,所以它的工作原理在Objective-C

更新:

NSString* pattern = @"/\\B\\$((?:[0-9]+(?=[a-z])|(?![0-9\\.\\:\\_\\-]))(?:[a-z0-9]|[\\_\\.\\-\\:](?![\\.\\_\\.\\-\\:]))*[a-z0-9]+)/ig;"; 
NSRegularExpression *usernameRegex = [[[NSRegularExpression alloc] initWithPattern:pattern 
                    options:NSRegularExpressionCaseInsensitive 
                    error:nil]; 
                     error:nil]; 

給我一個關於Parse Issue - Unexpected Identifier的錯誤

回答

7

反斜槓用作C字符串中的轉義字符。要將包含反斜槓的正則表達式作爲正則表達式轉義,您需要將它們加倍。

0

從millimoose正確的解決方案繼,這裏是一個的NSString類中的方法我用它來逃脫正則表達式模式黑色斜線的目的C.

+ (NSString *)escapeBackslashes:(NSString *)regexString 
{ 
    NSError *error = NULL; 
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\\\" options:NSRegularExpressionCaseInsensitive | NSRegularExpressionDotMatchesLineSeparators | NSRegularExpressionAnchorsMatchLines | NSRegularExpressionAllowCommentsAndWhitespace error:&error]; 
    if (error == NULL) 
    { 
     return [regex stringByReplacingMatchesInString:regexString options:0 range:NSMakeRange(0, [regexString length]) withTemplate:@"\\\\"]; 
    } 
    else 
    { 
     return regexString; 
    } 
} 

用例:

NSString* pattern = [NSString escapeBackslashes:pattern]; 
相關問題