Извлечение текста с помощью NSRegularExpression - PullRequest
3 голосов
/ 15 января 2011

Учитывая NSString *test = @"...href="/functions?q=KEYWORD\x26amp...";

Как мне извлечь слово KEYWORD из строки, используя NSRegularExpression?
Я пробовал следующее NSRegularExpression в iOS SDK 4.2, но этоне удалось найти текст.Следующий код выглядит хорошо?

NSRegularExpression *testRegex = [NSRegularExpression regularExpressionWithPattern:@"(?<=href=\"\\/functions\\?q=).+?(?=\\x26amp])" options:0 error:nil];
NSRange result = [testRegex rangeOfFirstMatchInString:test options:0 range:NSMakeRange(0, [test length])];

1 Ответ

10 голосов
/ 15 января 2011

Прямо перед концом в вашем регулярном выражении есть "]", что, вероятно, вызывает проблему.Вам также нужно использовать четыре слеша, чтобы соответствовать слешу во входной строке.(Удвойте его, чтобы экранировать в строке C, а затем еще раз, чтобы избежать в регулярном выражении)Я бы предложил две вещи.Сначала передайте что-то в параметре error и посмотрите на него в отладчике.Во-вторых, я не большой поклонник выражений «lookahead / lookbehind».Я думаю, что этот стиль более читабелен:

NSString *regexStr = @"href=\"\\/functions\\?=(.+?)\\\\x26amp";
NSError *error;
NSRegularExpression *testRegex = [NSRegularExpression regularExpressionWithPattern:regexStr options:0 error:&error];
if( testRegex == nil ) NSLog( @"Error making regex: %@", error );
NSTextCheckingResult *result = [testRegex firstMatchInString:test options:0 range:NSMakeRange(0, [test length])];
NSRange range = [result rangeAtIndex:1];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...