Как вы получаете подстроку, используя 2 инкапсулирующих символа?

Как мы получаем подстроку из:

NSString *string = @"exmple string [image]";

где мы хотим извлечь строку между "[" и "]".

Я думал об использовании NSRange с:

NSRange rangeStart = [title rangeOfString:@"[" options:NSLiteralSearch];
NSRange rangeEnd = [title rangeOfString:@"]" options:NSLiteralSearch];

Но я не могу найти решение по этому вопросу.

3 ответа

Решение

Вариант 1:

NSRange rangeStart = [title rangeOfString:@"[" options:NSLiteralSearch];
NSRange rangeEnd = [title rangeOfString:@"]" options:NSLiteralSearch];
substring = [your_string substringWithRange:NSMakeRange(rangeStart.location + 1, rangeEnd.location - rangeStart.location - 1)];

Вариант 2:

NSArray *ar = componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"[]"];
substring = ar[1];

Посмотрите на NSRegularExpression, и этот ответ даст вам регулярное выражение, которое вы хотите.

Использование fo регулярного выражения (Regex) - это путь для вещей такого типа:

NSError* error;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\[(.*?)\\]" options:NSRegularExpressionCaseInsensitive error:&error];

NSString *str = @"example string [image]";
NSRange rangeOfFirstMatch = [regex rangeOfFirstMatchInString:str options:0 range:NSMakeRange(0, [str length])];
NSString *substringForFirstMatch;
if (!NSEqualRanges(rangeOfFirstMatch, NSMakeRange(NSNotFound, 0))) {
        substringForFirstMatch = [str substringWithRange:NSMakeRange(rangeOfFirstMatch.location + 1, rangeOfFirstMatch.length - 2)];
  }

NSLog(@"%@", substringForFirstMatch); // will print image
Другие вопросы по тегам