Я получил строку типа "stackoverflow.html" и в регулярном выражении "stack (.). html" Я хотел бы иметь значение в (.).
Я мог найти только NSPredicate, например:
NSString *string = @"stackoverflow.html";
NSString *expression = @"stack(.*).html";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", expression];
BOOL match = [predicate evaluateWithObject:string]
Но это только говорит, что я получил совпадение и не возвращаю строку, когда я использую NSRegularExpression:
NSRange range = [string rangeOfString:expression options:NSRegularExpressionSearch|NSCaseInsensitiveSearch];
if (range.location == NSNotFound) return nil;
NSLog (@"%@", [string substringWithRange:(NSRange){range.location, range.length}]);
Это даст мне полную строку назад, stackoverflow.html, но меня интересует только то, что в (. *). Я хочу получить "переполнение". В PHP это было легко сделать, но как вы можете это сделать в xCode для iOS?
Логически, если бы я сделал это:
NSInteger firstPartLength = 5;
NSInteger secondPartLength = 5;
NSLog (@"%@", [string substringWithRange:(NSRange){range.location + firstPartLength, range.length - (firstPartLength + secondPartLength)}]
Это дает мне результат переполнения. Но проблема во многих случаях я не знаю, длина первой части или второй части. Таким образом, я могу получить значение, которое должно быть в (. *)?
Или я должен решить выбрать самый уродливый метод, найдя местоположение (.) и вычислив первую и вторую часть оттуда? Но в регулярном выражении у вас может также быть ([a-z]), но затем уродливый способ использования другого регулярного выражения для определения местоположения значений между(), а затем использовать его для вычисления левой и правой частей? И что происходит, если у меня больше? как "A (.) должен найти ответ на (. *)". Я хотел бы получить массив как результат со значениями [0] значение после A и [1] значение после.
Надеюсь, мой вопрос ясен.
Спасибо заранее,