(iOS)用正则去替换字符串中的字符

  • 今天一个朋友问我 怎么去把

九朝古都是[[洛阳|开封|西安]]

六朝古都是[[洛阳|西安]]

这样的一个字符串中的[[洛阳|开封|西安]]字符替换成一个其他的字符串,而且字符串里面不止有仅仅一个这种字符。

  • 第一次我是这样写的
  ///
//*  /替换掉[[]]  以及[[]]里面的字符串
//*
//*  @param string 原始字符串
//*
//*  @return 得到的新的字符串
//*/
- (NSString *)str:(NSString *)string replaceStr:(NSString *)replaceStr{
    NSString *newString = string;
    if ([string rangeOfString:@"[["].location != NSNotFound||[string rangeOfString:@"]]"].location != NSNotFound) {
        NSArray  * arr = [string  componentsSeparatedByString:@"[["];
        string  = arr[1];
        NSArray  * arr1 = [string  componentsSeparatedByString:@"]]"];
        string = arr1[0];
        string = [NSString stringWithFormat:@"[[%@]]",string];
    }
    newString = [newString stringByReplacingOccurrencesOfString:string withString:replaceStr];
    return newString;
}

可是这种方法只能满足该方法只能满足里面只有一个这种样式的字符[[哈哈哈]],才能够替换成功

  • 最后是用这种方法解决的,无论改字符串中有多少个这种样式的字符,都能够一下替换掉
- (NSString  *)string:(NSString *)string  replaceStr:(NSString *)replaceStr{

    NSRegularExpression *regularExpression = [NSRegularExpression regularExpressionWithPattern:

                                              @"\\[{2}([\u4E00-\u9FFF]+)+((\\|){1}([\u4E00-\u9FFF]+))*\\]{2}" options:0 error:nil];
    string  = [regularExpression stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, string.length) withTemplate:replaceStr];
     return string;
}
  • 朋友试着用了下发现上面方法只能匹配汉字,所以又有了下面这个方法

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

    NSRegularExpression *regularExpression = [NSRegularExpression regularExpressionWithPattern:
                                                  @"\\[{2}.*?\\]{2}"
                                                                                       options:0 error:nil];


    string  = [regularExpression stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, string.length) withTemplate:replaceStr];
     return string;
}

你可能感兴趣的:((iOS)用正则去替换字符串中的字符)