2015-11-04 76 views
1

我有這個字符串:Objective-C的正則表達式錯誤

{{nat fs g player|no=1|pos=GK|name=[[Hugo Lloris]]|age={{Birth date and age|1986|12|26|df=y}}|caps=73|goals=0|club=[[Tottenham Hotspur F.C.|Tottenham Hotspur]]|clubnat=ENG}} 

,我想從這個字符串中獲取數據,所以我建立的正則表達式有:

https://regex101.com/r/jA1zS4/1

但是當我運行這個代碼在我的項目我得到錯誤:

NSString *string = @"{{nat fs g player|no=1|pos=GK|name=[[Hugo Lloris]]|age={{Birth date and age|1986|12|26|df=y}}|caps=73|goals=0|club=[[Tottenham Hotspur F.C.|Tottenham Hotspur]]|clubnat=ENG}}"; 
NSError *error = NULL; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"{{nat fs g player\\|no=(.*)\\|pos=(.*?)\\|name=\[\[(.*?)\\]\\]\\|age=\{\{Birth date and age\\|(.*?)\\|(.*?)\\|(.*?)\\|df=y\\}\\}\\|caps=(.*?)\\|goals=(.*?)\\|club=\[\[(.*?)\\|(.*)" 
                     options:NSRegularExpressionCaseInsensitive 
                     error:&error]; 

NSArray *matches = [regex matchesInString:string 
            options:0 
            range:NSMakeRange(0, [string length])]; 


Error Domain=NSCocoaErrorDomain Code=2048 "The value 「{{nat fs g player\|no=(.*)\|pos=(.*?)\|name=[[(.*?)\]\]\|age={{Birth date and age\|(.*?)\|(.*?)\|(.*?)\|df=y\}\}\|caps=(.*?)\|goals=(.*?)\|club=[[(.*?)\|(.*)」 is invalid." UserInfo={NSInvalidValue={{nat fs g player\|no=(.*)\|pos=(.*?)\|name=[[(.*?)\]\]\|age={{Birth date and age\|(.*?)\|(.*?)\|(.*?)\|df=y\}\}\|caps=(.*?)\|goals=(.*?)\|club=[[(.*?)\|(.*)} 
+0

您未能正確地轉義方括號。 –

回答

1

我會使用一點不同的正則表達式:我倒是替換所有.*?[^|]*有更好的表現:

\{\{nat fs g player\|no=([^|]*)\|pos=([^|]*)\|name=\[\[([^|]*)\]\]\|age=\{\{Birth date and age\|([^|]*)\|([^|]*)\|([^|]*)\|df=y}}\|caps=([^|]*)\|goals=([^|]*)\|club=\[\[([^|]*)\|(.*) 

而在Objective-C,你需要逃避所有|[]{}

NSString *pattern = @"\\{\\{nat fs g player\\|no=([^|]*)\\|pos=([^|]*)\\|name=\\[\\[([^|]*)\\]\\]\\|age=\\{\\{Birth date and age\\|([^|]*)\\|([^|]*)\\|([^|]*)\\|df=y\\}\\}\\|caps=([^|]*)\\|goals=([^|]*)\\|club=\\[\\[([^|]*)\\|(.*)"; 

IDEONE demo證明有是一場比賽。