美文网首页
使用正则筛选字符串

使用正则筛选字符串

作者: HH思無邪 | 来源:发表于2018-06-13 16:49 被阅读10次
    匹配结果.png

    1. 正则基础应用

    voidtest1(){
        /**
         * 1.创建正则表达式
         * 1.1定义规则
         */
        // Pattern : 样式\规则
    
        //        NSString *pattern = @"ab7”;
    
        //\\u4e00-\\u9fa5 中文匹配
    
        // [] : 找到内部的某一个字符即可
    
        //        NSString *pattern = @"[0123456789]";
    
        //        NSString *pattern = @"[0-9]";
    
        //        NSString *pattern = @"[a-zA-Z0-9]";
    
        //        NSString *pattern = @"[0-9][0-9]";
    
        //        NSString *pattern = @"\\d\\d\\d";
    
        //        NSString *pattern = @"\\d{2,4}";
    
        //\\u4e00-\\u9fa5 中文匹配
    
        // ? + *
    
        // ? : 0个或者1个
    
        // + : 至少1个
    
        // * : 0个或者多个
    
        NSString*pattern=@"[0-9a-zA-Z]";
    
        NSRegularExpression*regex=[[NSRegularExpressionalloc]initWithPattern:pattern options:0error:nil];
    
        /**
    
         2.测试字符串
         *regex 正则表达式
    
         *userName 测试的字符串
    
         *range 测试范围
    
         */
        //被测试字符串
    
        NSString*userName=@"19712345678";
    
        NSArray*results = [regex matchesInString:userName options:0range:NSMakeRange(0, userName.length)];
    
        NSLog(@"--results个数--%ld", results.count);
    }
    

    2. //遍历所有字符串打印结果

    NSString*str = @"#呵呵呵#[偷笑] [http://foo.com/blah_blah](http://foo.com/blah_blah)#解放军#//[http://foo.com/blah_blah](http://foo.com/blah_blah)@Ring花椰菜:就#范德萨发生的#舍不得打[test] 就惯#急急急#着他吧[挖鼻屎]//@崔西狮:小拳头举起又放下了 说点啥好呢…… //@toto97:@崔西狮 蹦米咋不揍他#哈哈哈# [http://foo.com/blah_blah](http://foo.com/blah_blah)";
    
        // #话题#的规则
    
        NSString*topicPattern = @"#[0-9a-zA-Z\\u4e00-\\u9fa5]+#";
    
        // 表情
    
        NSString* expressionpattern=@"\\[[\\u4e00-\\u9fa5]+\\]";
    
        //@规则
    
        NSString* atcpattern=@"@[\\u4e00-\\u9fa5]+";
    
        // | 匹配多个条件,相当于or\或
    
        NSString*pattern=[NSStringstringWithFormat:@"%@|%@|%@",topicPattern,expressionpattern,atcpattern];
    
        NSRegularExpression*regex=[[NSRegularExpressionalloc]initWithPattern:pattern options:0error:nil];
    
        NSArray*results = [regex matchesInString:str options:0range:NSMakeRange(0, str.length)];
    
        //遍历匹配结果
    
        for(NSTextCheckingResult*result inresults){
    
            NSLog(@"%@ %@", NSStringFromRange(result.range), [str substringWithRange:result.range]);
    
    }
    

    3. RegexKitLite 框架强大的正则辅助框架

    框架使用https://www.jianshu.com/p/e73ea78ba8f9

    项目更改:

    非ARC支持.png
    添加字符串依赖库libicuco.png

    4. 使用框架做事情

           NSString*str = @"#呵呵呵#[偷笑] [http://foo.com/blah_blah](http://foo.com/blah_blah)#解放军#//[http://foo.com/blah_blah](http://foo.com/blah_blah)@Ring花椰菜:就#范德萨发生的#舍不得打[test] 就惯#急急急#着他吧[挖鼻屎]//@崔西狮:小拳头举起又放下了 说点啥好呢…… //@toto97:@崔西狮 蹦米咋不揍他#哈哈哈# [http://foo.com/blah_blah](http://foo.com/blah_blah)";
    
            // #话题#的规则
    
            NSString*topicPattern = @"#[0-9a-zA-Z\\u4e00-\\u9fa5]+#";
    
            // 表情
    
            NSString* expressionpattern=@"\\[[\\u4e00-\\u9fa5]+\\]";
    
            //@规则
    
            NSString* atcpattern=@"@[\\u4e00-\\u9fa5]+";
    
            // url链接的规则
    
            NSString*urlPattern = @"\\b(([\\w-]+://?|www[.])[^\\s()<>]+(?:\\([\\w\\d]+\\)|([^[:punct:]\\s]|/)))";
    
            // | 匹配多个条件,相当于or\或
    
            NSString*pattern=[NSStringstringWithFormat:@"%@|%@|%@|%@",topicPattern,expressionpattern,atcpattern,urlPattern];
    
            //简单打印
    
    //        NSArray *results=[str componentsSeparatedByRegex:pattern];
    
    //        NSLog(@"--results--%@", results);
    
            //遍历所有匹配结果
    
            [str enumerateStringsMatchedByRegex:pattern usingBlock:^(NSIntegercaptureCount, NSString*const__unsafe_unretained*capturedStrings, constNSRange*capturedRanges, volatileBOOL*conststop) {
    
                NSLog(@"%@ %@ ",*capturedStrings,NSStringFromRange(*capturedRanges));
    
            }];
            NSLog(@"-------------");
            // 以正则表达式为分隔符
    [str enumerateStringsSeparatedByRegex:pattern usingBlock:^(NSIntegercaptureCount, NSString*const__unsafe_unretained*capturedStrings, constNSRange*capturedRanges, volatileBOOL*conststop) {
    
                NSLog(@"%@ %@", *capturedStrings, NSStringFromRange(*capturedRanges));
            }];
    
    

    相关文章

      网友评论

          本文标题:使用正则筛选字符串

          本文链接:https://www.haomeiwen.com/subject/kpajeftx.html