前提是朋友有个需求帮忙,集成百度地图得出了公交路线方案(字符串),但只需要路线方案的公交路数。第一时间就考虑了字符串切割,后来发现贼鸡儿麻烦。最后想到了js正则表达式切割字符串,最后会得出指定切割字符串的数组。上网搜了下,果然iOS也有类似功能的API:NSRegularExpression(NSPredicate也尝试过,自己觉得不太合适),这个iOS自己搞的一套用于处理正则表达式的类,还是不错的。下面是例子:
NSString*routeStr =@"步行375米,到达温德桥站,乘坐1路,再做K1路,经过13站,到达吉林站西广场站,步行355米,到达终点站,步行966米,到达农林街站,乘坐45路,经过15站,到达吉林站西广场站,,再做123abc路步行358米,到达终点站,步行421米,到达市一中站,乘坐7路,经过24站,到达吉林站西广场站,步行508米,到达终点站,步行231米,到达市一中站,乘坐7路,经过2站,到达农林街站,再做11F22路,步行125米,到达农林街站,乘坐45路,经过15站,到达吉林站西广场站,步行358米,到达终点站,步行419米,到达市一中东门站,乘坐57路,经过9站,到达德胜门站,步行1米,到达德胜门站,乘坐8路,经过6站,到达吉林站西广场站,步行368米,到达终点站";
NSString*regex =@"\[0-9a-zA-Z]+\u8def|\u7ec8\u70b9\u7ad9"; //Unicode编码:\u8def:路 \u7ec8\u70b9\u7ad9:终点站
NSRegularExpression*predicate = [NSRegularExpressionregularExpressionWithPattern:regexoptions:0error:nil];
__blockNSMutableArray*fields = [[NSMutableArrayalloc]init];
[predicateenumerateMatchesInString:routeStroptions:0range:NSMakeRange(0, routeStr.length)
usingBlock:^(NSTextCheckingResult*match,NSMatchingFlagsflags,BOOL*stop){
[fieldsinsertObject:[routeStrsubstringWithRange:match.range]atIndex:fields.count];
}];
NSLog(@"指定路径数组:%@",fields); //指定路径数组:(1路,K1路,终点站,45路,123abc路,终点站,7路,终点站,7路,11F22路,45路,终点站,57路,8路,终点站)
最后,说明一点,其实不是我不想说明其中具体内容,因为现在是个菜鸡,还有工作,其中函数和具体东西,如果后期再遇到,有时间深入了解,会不断更新的(简书现在也懒得只写纯文字,哈哈)。
这里主要给看到 的人提供了一个思路:NSRegularExpression + 正则(NSRegularExpression给我提供给了可实现API,正则自己看去,我也是琢磨着写,NSRegularExpression不需要加^$这种正则的标识,算是固定格式)。