Mam ciąg taki jak "stackoverflow.html" i wyrażenie regularne "stos (.) .html" Chciałbym mieć wartość w (.).Jak uzyskać dopasowania w iOS przy użyciu wyrażenia regularnego?
mogłem tylko znaleźć NSPredicate jak:
NSString *string = @"stackoverflow.html";
NSString *expression = @"stack(.*).html";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", expression];
BOOL match = [predicate evaluateWithObject:string]
Ale to tylko mówi mam mecz i nie zwraca ciąg, gdy używam NSRegularExpression:
NSRange range = [string rangeOfString:expression options:NSRegularExpressionSearch|NSCaseInsensitiveSearch];
if (range.location == NSNotFound) return nil;
NSLog (@"%@", [string substringWithRange:(NSRange){range.location, range.length}]);
To daje mi całkowity ciąg z powrotem, stackoverflow.html, ale interesuje mnie tylko to, co jest w (. *). Chcę odzyskać "przepełnienie". W PHP było to łatwe do zrobienia, ale jak można to osiągnąć w XCode dla iOS?
Logicznie czy chciałbym to zrobić:
NSInteger firstPartLength = 5;
NSInteger secondPartLength = 5;
NSLog (@"%@", [string substringWithRange:(NSRange){range.location + firstPartLength, range.length - (firstPartLength + secondPartLength)}]
To daje mi wynik propert 'przepełnienia'. Ale problem jest w wielu przypadkach nie wiem długość pierwszej części lub drugiej części. Czy istnieje sposób, aby uzyskać wartość, która powinna być (. *)?
Czy muszę zdecydować się wybrać najbrzydszą metodę, znajdując lokalizację (.) i obliczyć pierwszą i drugą część stamtąd? Ale w wyrażeniu regularnym możesz również mieć ([a-z]), ale potem brzydki sposób użycia innego wyrażenia regularnego, aby uzyskać położenie wartości pomiędzy(), a następnie użyć go do obliczenia lewej i prawej części? A co się stanie, jeśli będę miał więcej? jak "A (.) powinien znaleźć odpowiedź na (. *)." Chciałbym mieć tablicę jako wynik wartości [0] wartość po A i [1] wartość po do.
Mam nadzieję, że moje pytanie jest jasne.
Dzięki z góry,
myślę NSRegularExpression bardziej przydatny – SAKrisT
porównaniu do Perl czy Ruby lub wielu innych językach, NSRegularExpression jest mocny, ale w najczęstszych przypadkach stosuje paragraf zrobić praca warta zdania. Podoba mi się, jak ten przykład biblioteki pozwala dopasować wyrażenie i przechwycić grupę w jednej rozsądnej linii. –