前提是朋友有個需求幫忙,集成百度地圖得出了公交路線方案(字符串),但只需要路線方案的公交路數。第一時間就考慮了字符串切割,后來發現賊雞兒麻煩。最后想到了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不需要加^$這種正則的標識,算是固定格式)。