Objective-c 正则表达式错误
Objective-c Regex error
我有这个字符串:
{{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=[[(.*?)\|(.*)}
我会使用一些不同的正则表达式:我会用 [^|]*
替换所有 .*?
以获得更好的性能:
\{\{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 证明存在匹配项。
我有这个字符串:
{{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=[[(.*?)\|(.*)}
我会使用一些不同的正则表达式:我会用 [^|]*
替换所有 .*?
以获得更好的性能:
\{\{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 证明存在匹配项。