29,028
社区成员
发帖
与我相关
我的任务
分享
NSString *data = @"<fieldset><legend> 引用: 芳山 </legend><br /><fieldset><legend> 引用: zstc2005 </legend><br />2015.02.18的<br />\r\n<br />\r\n拌海蜇、拌皮蛋、拌菠菜、炒三冬、大蒜肉皮炒肚片、老燒魚塊,吃飯。<br />\r\n<br />\r\n</fieldset><br /><br />\r\n<br />\r\n大年30不杀鸡吗?</fieldset><br /><br />\r\n我們這的習俗是年菜一定要有一條魚或者魚的一部分,寓意<b>連年有餘</b>。";
Floor *floor = [Floor floorWithData:data];
NSLog(@"%@", floor);
@interface Floor : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *content;
@property (nonatomic, strong) Floor *replyFloor;
@property (nonatomic, copy) NSString *rawData;
+ (Floor *)floorWithData:(NSString *)rawData;
@end
@implementation Floor
+ (Floor *)floorWithData:(NSString *)rawData {
static NSString *fieldset = @"<fieldset>";
static NSString *fieldsetEnded = @"</fieldset>";
Floor *floor = [Floor new];
floor.rawData = rawData;
NSArray *fieldsetRanges = matchesInRegex(fieldset, floor.rawData);
NSArray *fieldsetEndedRanges = matchesInRegex(fieldsetEnded, floor.rawData);
if (fieldsetRanges.count != fieldsetEndedRanges.count) {
NSLog(@"格式不正确");
return nil;
}
NSString *content = floor.rawData;
if (fieldsetRanges.count + fieldsetEndedRanges.count > 0) {
NSRange replyStartRange = NSRangeFromString(fieldsetRanges.firstObject);
NSRange replyEndedRange = NSRangeFromString(fieldsetEndedRanges.lastObject);
NSString *replyString = [floor.rawData substringWithRange:NSMakeRange(replyStartRange.location,
replyEndedRange.location + replyEndedRange.length - replyStartRange.location)];
content = [floor.rawData stringByReplacingOccurrencesOfString:replyString withString:@""];
NSString *replyRawData = [replyString substringWithRange:NSMakeRange(fieldset.length, replyString.length - fieldset.length - fieldsetEnded.length)];
floor.replyFloor = [Floor floorWithData:replyRawData];
}
floor.content = content;
return floor;
}
@end
NSArray *matchesInRegex(NSString *pattern, NSString *rawData) {
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern
options:NSRegularExpressionCaseInsensitive
error:nil];
NSArray *matches = [regex matchesInString:rawData options:0 range:NSMakeRange(0, rawData.length)];
NSMutableArray *matchRanges = [NSMutableArray arrayWithCapacity:matches.count];
for (NSTextCheckingResult *match in matches) {
[matchRanges addObject:NSStringFromRange(match.range)];
}
return matchRanges;
}