重复应用正则表达式

时间:2011-10-30 13:37:30

标签: iphone objective-c ios regex

我有这样的文字表达式:

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 个答案:

答案 0 :(得分:2)

您正在与.*进行贪婪匹配,因此正则表达式会尽可能多地捕获.*中的正则表达式。您应该执行.*?[^']*,以便*'无法匹配。