Как я могу избежать этого регулярного выражения в Objective-C? - PullRequest
4 голосов
/ 22 октября 2011

У меня есть следующее регулярное выражение, которое я хотел бы экранировать в 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

Ответы [ 2 ]

7 голосов
/ 22 октября 2011

Обратная косая черта используется в качестве escape-символов в C-строках.Чтобы сделать регулярное выражение, содержащее обратную косую черту при выходе из регулярного выражения, необходимо удвоить их.

0 голосов
/ 28 июня 2014

Исходя из правильного решения по 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];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...