我想在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
答案 0 :(得分:7)
反斜杠用作C字符串中的转义字符。要使包含反斜杠的正则表达式作为正则表达式转义,您需要将它们加倍。
答案 1 :(得分:0)
通过millimoose从正确的解决方案开始,这是一个NSString类别方法,用于在Objective 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];