2015-11-04 86 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证明有是一场比赛。