iphone - поиск - регулярные выражения синтаксис



Как получить совпадения в iOS с использованием регулярного выражения? (2)

Вы хотите, чтобы библиотека RegexKitLite выполняла регулярные выражения:

http://regexkit.sourceforge.net/RegexKitLite/

После этого это почти так, как вы это делаете в PHP.

Я добавлю код, который поможет вам в этом:

NSString *string     = @"stackoverflow.html";
NSString *expression = @"stack(.*)\\.html";
NSString *matchedString = [string stringByMatching:expression capture:1];

matchedString - это «переполнение», которое должно быть именно тем, что вам нужно.

https://src-bin.com

Я получил строку типа «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)}]

Это дает мне результат «переполнения». Но проблема во многих случаях я не знаю, длина первой части или второй части. Таким образом, я могу получить значение, которое должно быть в (. *)?

Или я должен решить выбрать самый уродливый метод, найдя местоположение (. ) И вычислив первую и вторую часть оттуда? Но в регулярном выражении у вас может также быть ([az]), но затем уродливый способ использования другого регулярного выражения для определения местоположения значений между (), а затем использовать его для вычисления левой и правой частей? И что происходит, если у меня больше? как «A (. ) должен найти ответ на (. *)». Я хотел бы получить массив как результат со значениями [0] значение после A и [1] значение после.

Надеюсь, мой вопрос ясен.

Заранее спасибо,


Answer #1

в iOS 4.0+ вы можете использовать NSRegularExpression :

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"stack(.*).html" options:0 error:NULL];
NSString *str = @".html";
NSTextCheckingResult *match = [regex firstMatchInString:str options:0 range:NSMakeRange(0, [str length])];
// [match rangeAtIndex:1] gives the range of the group in parentheses
// [str substringWithRange:[match rangeAtIndex:1]] gives the first captured group in this example




xcode