有这么个业务需求,抽象出来如下:
根据上述需求,讨论确定了服务端下发的“某某人”采用[UserId]uid[/UserId]这样的UBB标签格式,客户端进行解析和替换。
要解析内容,首先要匹配指定的UBB标签,一种简单粗暴的方案就是先查找第一个[UserId],再查找第一个[/UserId],定位到匹配内容。
为了代码好看点,也可以采用正则表达式匹配。第一个版本如下:
NSString *reStr = [NSString stringWithFormat:@"[%@].*[/%@]", ubbTag, ubbTag];
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:reStr options:0 error:NULL]; NSString *reStr = [NSString stringWithFormat:@"\[%@].*?[/%@\]", ubbTag, ubbTag];
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:reStr options:0 error:NULL]; NSString *reStr = [NSString stringWithFormat:@"\\[%@\\].*\\[/%@\\]", ubbTag, ubbTag];
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:reStr options:0 error:NULL]; NSString *reStr = [NSString stringWithFormat:@"\\[%@\\].*?\\[/%@\\]", ubbTag, ubbTag];
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:reStr options:0 error:NULL];#import <Foundation/Foundation.h>
@interface NSMutableString (UBBParser)
- (void)enumUBBTag:(NSString *)ubbTag usingBlock:(void (^)(NSRange tagRange,
NSString *tagContent,
NSMutableString *currentStr,
BOOL *stop))block;
@end [string enumUBBTag:@"UserId" usingBlock:^(NSRange tagRange, NSString *tagContent, NSMutableString *currentStr, BOOL *stop) {
NSString *currentDisplayName = ...
if (currentDisplayName.length == 0) currentDisplayName = tagContent;
[currentStr replaceCharactersInRange:tagRange withString:currentDisplayName];
}];使用Objective-C处理UBB标签,布布扣,bubuko.com
原文地址:http://blog.csdn.net/jasonblog/article/details/26672393