【问题标题】:NSString strip regular \ escape characters how?NSString 怎么去掉正则\转义字符?
【发布时间】:2012-11-16 21:05:19
【问题描述】:

我需要一段高效的代码来去除转义字符。这是常规转义而不是 HTML 转义字符。

示例:"\""、"\\\\"、"\"、"\\"

我想要一个通用算法来去除任何类型的转义序列。

可以使用任何实用程序,如正则表达式。

  (NSString*) unescape:(NSString*) string {

      ....
  }

这是我写的答案:

-(NSString*) unescape:(NSString*) string
{

    for(int i = 0; i < string.length; i++) {
        char a = [string characterAtIndex:i];
        if([string characterAtIndex:i] == '\\' ) {
            string = [string stringByReplacingCharactersInRange:NSMakeRange(i,1) withString:@""];
        }

    }
    return string;
}

【问题讨论】:

  • 什么样的转义字符?有很多类型的转义系统。 C风格? HTML?什么?
  • 只是像“\\”这样的常规转义
  • @userXXX 在这种情况下,您可以将"\\\"" 替换为"\"" 等。
  • 我想要一个通用算法来去除任何类型的转义序列。
  • 这样的正则表达式如何从字符串中剥离,\\[bntr\\\\"]

标签: iphone ios ipad nsstring escaping


【解决方案1】:

尝试使用以下代码进行 HTML 转义

(NSString*) unescape:(NSString*) string 
{
    return [string stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
}

用于常规转义

(NSString*) unescape:(NSString*) string 
{    
    return [string stringByReplacingOccurrencesOfString:@"\\\"" withString:@"\""];
}

【讨论】:

  • 我想要一个通用算法,可以去除任何类型的转义序列。不只是“\”。另一个例子:“\\\\\\\\”
  • 如果字符串包含“\\”,即两个反斜杠,这将无法正常工作,这在转义字符串中很常见。
【解决方案2】:

您应该使用的最佳方法是:

- (NSString *)stringByTrimmingCharactersInSet:(NSCharacterSet *)set

你可以这样称呼它:

string = [string stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]];

【讨论】:

    【解决方案3】:

    如果你想使用正则表达式,你可以尝试使用正则表达式模式\\[bntr\\\\"]。或者在这里使用任何需要的正则表达式模式。

    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:
                                  @"\\[bntr\\\\"]" options:0 error:nil];
    
    [regex replaceMatchesInString:str options:0 range:NSMakeRange(0, [str length]) withTemplate:@""];
    

    【讨论】:

      【解决方案4】:

      我为我的回答道歉......

      NSString *_string = @"\\\\ dfsdg \\ tr\\\\t \\\\\\tw\\\\\\\\w\\ t\\ \\\\ \\ \\\\\\  rret\\    \\\\ \\\\\\\\";
      NSLog(@"%@", [_string stringByReplacingOccurrencesOfString:@"\\" withString:@""]);
      

      结果是:

       dfsdg  trt tww t     rret     
      

      【讨论】:

        【解决方案5】:

        如果其 URL 已编码,您可能正在寻找:

        stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding
        

        【讨论】:

          【解决方案6】:

          希望这会有所帮助:

          -(NSString *)unescape:(NSString *)string 
          {
              if ([string rangeOfString:@"\\"].location != NSNotFound)
              {
                  [string stringByReplacingCharactersInRange:@"\\" withString:@"\\"];
              }
              else if ([string rangeOfString:@"\\\\"].location != NSNotFound)
              {
                  [string stringByReplacingCharactersInRange:@"\\\\" withString:@"\\"];
              }
              else if ([string rangeOfString:@"\\\\"].location != NSNotFound)
              {
                  [string stringByReplacingCharactersInRange:@"\\\\" withString:@"\\"];
              }
          }
          

          【讨论】:

          • 不,这不是我想做的全部。如果就这么简单,我自己也会这样做
          • 这没有帮助。我需要一种蛮力的方式来从头到尾扫描每个字符......或者..使用正则表达式......所以如果你看到“\\\\”你用长度替换它(“\\\\ \") 除以两个 \ 字符....."要查找/替换的用户正则表达式"
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-08-05
          • 1970-01-01
          • 2021-11-03
          • 2018-09-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多