Ios6 解析大字符串&;在iOS 6+;中用新值替换解析的字符串值;

Ios6 解析大字符串&;在iOS 6+;中用新值替换解析的字符串值;,ios6,replace,string-parsing,Ios6,Replace,String Parsing,在我的应用程序中,我想按照以下步骤获得最终的字符串。 我的信息格式如下 message <br/><br/> On {date_time_stamp} sender_name wrote <br/><br/> 消息在{日期\u时间u stamp}发件人姓名已写入br/> 假设我的消息字符串如下所示 Hello developers <br/><br/> On {2013-02-28 05:00:33} Bob wrot

在我的应用程序中,我想按照以下步骤获得最终的字符串。 我的信息格式如下

message <br/><br/> On {date_time_stamp} sender_name wrote <br/><br/>
<代码>消息

在{日期\u时间u stamp}发件人姓名已写入

br/> 假设我的消息字符串如下所示

 Hello developers <br/><br/> On {2013-02-28 05:00:33} Bob wrote <br/><br/>
 Hello World <br/><br/> On {2013-02-27 08:35:33} Jack wrote <br/><br/>
 Hello Apple <br/><br/> On {2013-02-26 04:10:44} Tom wrote <br/><br/>
Hello developers

在{2013-02-28 05:00:33}上,鲍勃写道

你好,世界在{2013-02-27 08:35:33}上杰克写道 你好,苹果公司{2013-02-2604:10:44}上汤姆写道
现在我需要遵循以下步骤

  • 逐个获取消息中的所有日期

  • 将其从GMT时区转换为本地时区

  • 将消息中的GMT日期替换为本地日期时间

  • 最后将“特征线替换为\n”&从消息中删除大括号

  • 我有下面的代码

     -(void)parseMessageBody:(NSString*)msg
    {
        NSRange openBracket = [msg rangeOfString:@"{"];
        NSRange closeBracket = [msg rangeOfString:@"}"];
        NSRange numberRange = NSMakeRange(openBracket.location + 1, closeBracket.location - openBracket.location - 1);
        NSString *numberString = [msg substringWithRange:numberRange];
        NSLog(@"Parsed string: %@",numberString);
    }
    
    -(NSString*)formattedMessageFromString:(NSString*)msg
    {
        NSString *formattedMessage = @"";
        formattedMessage = [msg stringByReplacingOccurrencesOfString:@"<br/>" withString:@"\n"];
        return formattedMessage;
    }
    
    -(NSString*)getLocalDateFromUTCDateString:(NSString*)utcDateString
    {
        NSDateFormatter *serverDateFormatter = [[NSDateFormatter alloc] init];
        NSTimeZone *sourceTimeZone = [NSTimeZone timeZoneWithName:@"UTC"];
        [serverDateFormatter setTimeZone:sourceTimeZone];
        [serverDateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
        NSDate *dateFromServer = [serverDateFormatter dateFromString:utcDateString];
        DLog(@"UTC date From SERVER: %@",dateFromServer);
    
        NSDateFormatter *localDateFormatter = [[NSDateFormatter alloc] init];
        [localDateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
        NSTimeZone* localTimeZone = [NSTimeZone systemTimeZone];
        [localDateFormatter setTimeZone:localTimeZone];
        NSString *localDate = [localDateFormatter stringFromDate:dateFromServer];
        DLog(@"Converted Local DAte : %@",localDate);
    
        return localDate;
    }
    
    -(void)parseMessageBody:(NSString*)消息
    {
    NSRange openBracket=[msg rangeOfString:@“{”];
    NSRange closeBracket=[msg rangeOfString:@“}”];
    NSRange numberRange=NSMakeRange(openBracket.location+1,closeBracket.location-openBracket.location-1);
    NSString*numberString=[msg substringWithRange:numberRange];
    NSLog(@“解析字符串:%@”,numberString);
    }
    -(NSString*)formattedMessageFromString:(NSString*)消息
    {
    NSString*formattedMessage=@;
    formattedMessage=[msg StringByReplacingOfString:@“
    ”和字符串:@“\n”]; 返回格式化消息; } -(NSString*)getLocalDateFromUTCDateString:(NSString*)utcDateString { NSDateFormatter*serverDateFormatter=[[NSDateFormatter alloc]init]; NSTimeZone*sourceTimeZone=[NSTimeZone timeZoneWithName:@“UTC”]; [serverDateFormatter setTimeZone:sourceTimeZone]; [serverDateFormatter setDateFormat:@“yyyy-MM-dd HH:MM:ss”]; NSDate*dateFromServer=[serverDateFormatter dateFromString:utcDateString]; DLog(@“UTC日期自服务器:%@”,日期自服务器); NSDateFormatter*localDateFormatter=[[NSDateFormatter alloc]init]; [localDateFormatter setDateFormat:@“yyyy-MM-dd HH:MM:ss”]; NSTimeZone*localTimeZone=[NSTimeZone systemTimeZone]; [localDateFormatter setTimeZone:localTimeZone]; NSString*localDate=[localDateFormatter stringFromDate:dateFromServer]; DLog(@“转换的本地日期:%@”,localDate); 返回本地日期; }
    我无法执行步骤1和3以获取消息中的所有日期并将其替换为本地日期时间。 信息也会随着时间的推移而增长。所以解析需要快速。 有人能告诉我如何获取消息中的所有日期并用转换日期替换它吗


    非常感谢您的任何帮助。提前感谢。

    可以使用正则表达式查找和替换日期:

    NSString *msg = @"Hello developers <br/><br/> On {2013-02-28 05:00:33} Bob wrote <br/><br/>\n"
       "Hello World <br/><br/> On {2013-02-27 08:35:33} Jack wrote <br/><br/>\n"
       "Hello Apple <br/><br/> On {2013-02-26 04:10:44} Tom wrote <br/><br/>\n";
    NSMutableString *replacedMsg = [msg mutableCopy];
    
    NSString *pattern = @"\\{(.+?)\\}"; // Pattern for { ... }
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:NULL];
    
    __block int offset = 0;
    [regex enumerateMatchesInString:msg options:0 range:NSMakeRange(0, [msg length]) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
        NSRange range0 = [result range]; // range including { }
        NSRange range1 = [result rangeAtIndex:1]; // range excluding { }
        range0.location += offset;
        range1.location += offset;
        NSString *oldDate = [replacedMsg substringWithRange:range1];
        NSString *newDate = [self getLocalDateFromUTCDateString:oldDate];
        if (newDate != nil ) {
            [replacedMsg replaceCharactersInRange:range0 withString:newDate];
            offset += [newDate length] - range0.length;
        }
    }];
    
    NSLog(@"%@", replacedMsg);
    
    NSString*msg=@“开发者你好,{2013-02-28 05:00:33}Bob写道

    \n” “你好,世界

    在{2013-02-27 08:35:33}上,杰克写道

    \n” “你好,苹果公司,{2013-02-2604:10:44}上汤姆写道:


    \n”; NSMutableString*replacedMsg=[msg mutableCopy]; NSString*模式=@“\\{(.+?)\\}”//{…}的模式 NSRegularExpression*regex=[NSRegularExpression regular expressionwithpattern:pattern选项:0错误:NULL]; __块int偏移=0; [regex EnumerateMatchesInstalling:msg选项:0范围:NSMakeRange(0,[msg长度])使用块:^(NSTextCheckInResult*结果,NSMatchingFlags标志,BOOL*停止){ NSRange range 0=[结果范围];//范围包括{} NSRange range1=[result rangeAtIndex:1];//范围不包括{} 范围0.0位置+=偏移量; 范围1.位置+=偏移量; NSString*oldDate=[replacedMsg substringWithRange:range1]; NSString*newDate=[self-getLocalDateFromUTCDateString:oldDate]; 如果(newDate!=nil){ [replacedMsg ReplaceCharactersRange:Range 0 with String:newDate]; 偏移量+=[newDate length]-范围0.length; } }]; NSLog(@“%@”,替换DMSG);
    输出(我的本地时区为GMT+01):

    Hello developers

    鲍勃在2013-02-28 06:00:33写道 你好,世界在2013-02-27 09:35:33杰克写道 你好苹果公司在2013-02-26 05:10:44汤姆写道
    如果您需要有关正则表达式的更多解释,请告诉我!您能告诉我如何将HTML代码中的
    li
    标记替换为数字吗?这是我的问题
    Hello developers <br/><br/> On 2013-02-28 06:00:33 Bob wrote <br/><br/>
    Hello World <br/><br/> On 2013-02-27 09:35:33 Jack wrote <br/><br/>
    Hello Apple <br/><br/> On 2013-02-26 05:10:44 Tom wrote <br/><br/>