Проблема подстановки регулярных выражений в Objective-C - PullRequest
1 голос
/ 27 июня 2019

Попытка использовать все теги с заглавной буквы и проблемы с заменой.Есть идеи, почему не работает метод upperCaseString?

NSError *error = nil;
NSMutableString *stringToCap = [NSMutableString stringWithString:@"<kaboom>stuff</kaboom>"];
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(</?[a-zA-Z].*?>)" options:NSRegularExpressionCaseInsensitive error:&error];
NSMutableString *modifiedString = [NSMutableString stringWithString:[regex stringByReplacingMatchesInString:stringToCap options:0 range:NSMakeRange(0, [stringToCap length]) withTemplate:@"$1".uppercaseString]];

NSLog(@"%@", modifiedString);

Производит: <kaboom>stuff</kaboom>, когда я ожидаю <KABOOM>stuff</KABOOM>

1 Ответ

1 голос
/ 27 июня 2019

stringByReplacingMatchesInString:options:range:withTemplate: работает не так, тип последнего аргумента просто NSString, а передаваемая вами строка является результатом выражения @"$1".uppercaseString - просто @"$1".

Возможный алгоритм (псевдокод):

for NSTextCheckingResult *match in [regex matchesInString:... options:... range:...] do
   extract the substring at match.range from modified string
   uppercase it
   replace the substring at match.range with uppercased result
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...