iOS正则表达式使用

目标:解出以下题目:
在我们使用的微博中是可以去@别人的,那么在我们使用的时候就需要去处理一些字符串了。具体要求如下:
开始为一个以字母或是数字开始然后添加@符号,中间不论是什么东西,也可以有反斜杠,不过有反斜杠的字母都作为本身处理,以空格或是最终行结尾结束。如果空格前有反斜杠则不作为空格处理,直接向下进行搜索直至找到所需要的空格为止

代码解析用到知识点:
    1. 字符串处理,RangeOfString:withOption 使用正则表达式进行处理
    2. 按照逻辑,先找到所需要的@符号,再找到其后的空格
    3. 将所有的反斜杠用@“”替换掉,可以通过使用stringByRepla


具体封装方法如下:

- (void)dealWithString:(NSString *)str
{
    NSString *regexStringForHead = @"\\w@";
    NSString *regexStringForFooter = @"(\\w\\s)";
    
    NSRange rangeHead = [str rangeOfString:regexStringForHead options:NSRegularExpressionSearch];
    
    
    NSInteger headIndex = 0;
    NSInteger footerIndex = 0;

    if (rangeHead.location != NSNotFound) {
        headIndex = rangeHead.location + rangeHead.length;
        NSLog(@"headIndex %d",headIndex);
        
        NSString *strForFooter = [str substringFromIndex:rangeHead.length + rangeHead.location]; // 在头range后的串,从中查找结束需要的串
        NSRange rangeFooter = [strForFooter rangeOfString:regexStringForFooter options:NSRegularExpressionSearch];
        
        if (rangeFooter.location != NSNotFound) {
            footerIndex = rangeFooter.location + rangeFooter.length;
            NSLog(@"FooterIndex %d",footerIndex);
            
            NSRange rangeTemp = NSMakeRange(headIndex, footerIndex-1); // 去除最后的空格
            NSString *tempStr = [str substringWithRange:rangeTemp];
            [self.dataArr addObject:tempStr];
            
            str = [str substringFromIndex:rangeTemp.length + rangeTemp.location];
            [self dealWithString:str];
            
        } else{ // 到最终也没有找到
            str = [str substringFromIndex:headIndex];
            [self.dataArr addObject:str];
        }
    } 
}

处理掉所有的反斜杠

 
   for (int i = 0; i




输入的字符串,在使用的时候会自动进行转义,如果输入的是一个反斜杠,在OC中传输的时候就会发现其会转成两个反斜杠。所有相关操作也是这样。


用到的知识点:

    /*
     自定义能够匹配 '多种字符' 的表达式
    
    // \\w可以处理英文与数字两种 碰到其他的字符就会作为一个结束点进行处理,匹配字母或数字或下划线或汉字
     . 可以匹配除换行符以外的任意字符
     \s 匹配任意的空白符
     \d 匹配数字
     \b 匹配单词的开始或结束
    
     使用[]包含一系列字符,能够匹配其中任意一个字符。
     [^]包含一系列字符,只能匹配其中字符外的任意一个字符,同样的道理,虽然可以匹配其中任意一个,但是只能是一个,不是多个。
     [] 本身就隐含了“或”关系,在[]中使用“|”表示“或”的关系是不对的,这样做只是多了一个普通字符“|”,用来匹配“|”字符本身,()也是同样的道理
  
     示例:
    
     [ab5@]    : 匹配 "a" 或 "b" 或 "5" 或 "@"
   
     [^abc]    : 匹配 "a","b","c" 之外的任意一个字符
    
     [f-k]     : 匹配 "f"~"k" 之间的任意一个字母
    
     [^A-F0-3] : 匹配 "A"~"F","0"~"3" 之外的任意一个字符

    修饰匹配次数的特殊符号
     {n}   :  表达式重复n次
    
     {m,n} :  表达式至少重复m次,最多重复n次
    
     {m,}  :  表达式至少重复m次
    
     ?     :  匹配表达式0次或者1次,相当于 {0,1}
    
     +     :  表达式至少出现1次,相当于 {1,}
    
     *     :  表达式不出现或出现任意次,相当于 {0,}

     其他一些代表抽象意义的特殊符号
    
     ^     : 与字符串开始的地方匹配,不匹配任何字符
    
     $     : 与字符串结束的地方匹配,不匹配任何字符
   
     \b    : 匹配一个单词边界,也就是单词和空格之间的位置,不匹配任何字符
    
     ()    : 表示一个组,这个组是同时进行处理的,组中的元素会加在一起进行
     */

你可能感兴趣的:(iOS)