#iphone #objective-c #ios #regex
#iPhone #objective-c #iOS #регулярное выражение
Вопрос:
У меня есть текстовые выражения, подобные этому:
HIUPA:bla1bla1'HIUPD:bla2bla2'HIUPD:bla3bla3'HISYN:bla4bla4'
Я хочу извлечь следующие фрагменты текста:
HIUPD:bla2bla2'
И
HIUPD:bla3bla3'
Мой код Objective-C для этого выглядит так:
-(void) ermittleKonten:(NSString*) bankNachricht
{
NSRegularExpression* regexp;
NSTextCheckingResult* tcr;
regexp = [NSRegularExpression regularExpressionWithPattern:@"HIUPD.*'" options:0 error:nil];
int numAccounts = [regexp numberOfMatchesInString:bankNachricht options:0 range:NSMakeRange(0, [bankNachricht length])];
for( int i = 0; i < numAccounts; i ) {
tcr = [regexp firstMatchInString:bankNachricht options:0 range:NSMakeRange( 0, [bankNachricht length] )];
NSString* HIUPD = [bankNachricht substringWithRange:tcr.range];
NSLog(@"Found text is:n%@", HIUPD);
}
}
В коде Objective-C numAccounts равно 1, но должно быть 2. И найденная строка выглядит так: «HIUPD: bla2bla2’HIUPD: bla3bla3’HISYN:bla4bla4′»
Я протестировал шаблон регулярных выражений с помощью онлайн-инструмента ( http://www.regexplanet.com/simple/index.html ). В онлайн-инструменте он работает нормально и выдает 2 результата, как я хочу.
Но я хотел бы получить тот же результат в коде ios, то есть «HIUPD: bla2bla2′» и «HIUPD: bla3bla3′». Что не так с шаблоном?
Ответ №1:
Вы выполняете жадное сопоставление с .*
, поэтому регулярное выражение улавливает столько, сколько может в .*
. Вы должны выполнять .*?
или [^']*
, чтобы *
не совпадать с '
.