Вы можете использовать (.+)\1+
regex, которые будут соответствовать самым длинным подрядным подстрокам и заменять их единственными вхождениями, используя 1-й обратный адрес $1
.
Использование
NSError *error = nil;
NSString *string = @"FIRSTEXAMPLEEXAMPLETEST";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(.+)\\1+" options:nil error:&error];
NSString *modifiedString = [regex stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, [string length]) withTemplate:@"$1"];
NSLog(@"%@", modifiedString); // => FIRSTEXAMPLETEST
Посмотреть детали Objective-C demo
Pattern:
(.+)
- Группа 1 захватывая один или несколько отличных перевода строки символов (использовать (?s)
флаг перед позволить соответствие новой строки с точкой)
\1+
- одно или несколько вхождений одинаковых подстрок, зафиксированных в первой группе.
Большое спасибо. Я пропустил использовать $ 1, который держит 1-й референт. –