2011-10-30 28 views
0

我有文字表述是這樣的:應用正則表達式多次

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」。模式有什麼問題?

回答

2

您正在執行與.*的貪婪匹配,因此正則表達式在.*中捕獲的次數儘可能多。您應該做.*?[^']*,以便*不能匹配'