iOS 使用正则表达式拆分 NSString
iOS Split NSString with Regular Expression
我正在使用这段代码来解析 NSString
:
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])];
for (NSTextCheckingResult *match in matches) {
NSString *a = [string substringWithRange:[match rangeAtIndex:0]];
NSString *b = [string substringWithRange:[match rangeAtIndex:1]];
NSString *c = [string substringWithRange:[match rangeAtIndex:2]];
NSString *d = [string substringWithRange:[match rangeAtIndex:3]];
NSString *e = [string substringWithRange:[match rangeAtIndex:4]];
NSString *f = [string substringWithRange:[match rangeAtIndex:5]];
NSString *g = [string substringWithRange:[match rangeAtIndex:6]];
NSString *h = [string substringWithRange:[match rangeAtIndex:7]];
NSString *i = [string substringWithRange:[match rangeAtIndex:8]];
NSString *j = [string substringWithRange:[match rangeAtIndex:9]];
NSString *k = [string substringWithRange:[match rangeAtIndex:10]];
}
使用这段代码我确实得到了数据,但是当我试图用相同的模式拆分 2 个字符串时:
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}}{{nat fs g player|no=16|pos=GK|name=[[Steve Mandanda]]|age={{Birth date and age|1985|3|28|df=y}}|caps=21|goals=0|club=[[Olympique de Marseille|Marseille]]|clubnat=FRA}}";
我只有一场比赛,知道为什么吗?
您需要修复正则表达式以允许部分匹配。
由于记录以}}
结尾,所以在最后一个捕获组中使用惰性(.*?\}\})
。
正则表达式声明为:
NSString *pattern = @"\{\{nat fs g player\|no=([^|]*)\|pos=([^|]*)\|name=\[\[([^|]*)\]\]\|age=\{\{Birth date and age\|([^|]*)\|([^|]*)\|([^|]*)\|df=y\}\}\|caps=([^|]*)\|goals=([^|]*)\|club=\[\[([^|]*)\|(.*?\}\})";
我正在使用这段代码来解析 NSString
:
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])];
for (NSTextCheckingResult *match in matches) {
NSString *a = [string substringWithRange:[match rangeAtIndex:0]];
NSString *b = [string substringWithRange:[match rangeAtIndex:1]];
NSString *c = [string substringWithRange:[match rangeAtIndex:2]];
NSString *d = [string substringWithRange:[match rangeAtIndex:3]];
NSString *e = [string substringWithRange:[match rangeAtIndex:4]];
NSString *f = [string substringWithRange:[match rangeAtIndex:5]];
NSString *g = [string substringWithRange:[match rangeAtIndex:6]];
NSString *h = [string substringWithRange:[match rangeAtIndex:7]];
NSString *i = [string substringWithRange:[match rangeAtIndex:8]];
NSString *j = [string substringWithRange:[match rangeAtIndex:9]];
NSString *k = [string substringWithRange:[match rangeAtIndex:10]];
}
使用这段代码我确实得到了数据,但是当我试图用相同的模式拆分 2 个字符串时:
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}}{{nat fs g player|no=16|pos=GK|name=[[Steve Mandanda]]|age={{Birth date and age|1985|3|28|df=y}}|caps=21|goals=0|club=[[Olympique de Marseille|Marseille]]|clubnat=FRA}}";
我只有一场比赛,知道为什么吗?
您需要修复正则表达式以允许部分匹配。
由于记录以}}
结尾,所以在最后一个捕获组中使用惰性(.*?\}\})
。
正则表达式声明为:
NSString *pattern = @"\{\{nat fs g player\|no=([^|]*)\|pos=([^|]*)\|name=\[\[([^|]*)\]\]\|age=\{\{Birth date and age\|([^|]*)\|([^|]*)\|([^|]*)\|df=y\}\}\|caps=([^|]*)\|goals=([^|]*)\|club=\[\[([^|]*)\|(.*?\}\})";